Both sides previous revisionPrevious revisionNext revision | Previous revision |
rfc:generics [2016/04/25 14:58] – note about generic constructors mindplay | rfc:generics [2018/06/02 17:33] (current) – add github link mindplay |
---|
* Status: Draft | * Status: Draft |
* First Published at: http://wiki.php.net/rfc/generics | * First Published at: http://wiki.php.net/rfc/generics |
| |
| **NOTE:** a newer version of this RFC may be under development [[https://github.com/mindplay-dk/php-generics-rfc|on GitHub]]. |
| |
===== Introduction ===== | ===== Introduction ===== |
The first example is able to infer the type argument ''T'' as ''Hat'', because the type alias was used to type-hint the argument given for the ''$content'' parameter. | The first example is able to infer the type argument ''T'' as ''Hat'', because the type alias was used to type-hint the argument given for the ''$content'' parameter. |
| |
The second example results in a ''TypeError'', because the type parameter ''T'' was explicitly defined as ''string''. (Note that, if we had not used ''declare(strict_types=1)'', and if ''Box'' had implemented ''__toString()'', this would have been acceptable, due to the default behavior of weak scalar type-checking.) | The second example results in a ''TypeError'', because the type parameter ''T'' was explicitly defined as ''string''. (Note that, if we had not used ''declare(strict_types=1)'', and if ''Box'' had implemented ''<nowiki>__toString()</nowiki>'', this would have been acceptable, due to the default behavior of weak scalar type-checking.) |
| |
Note the addition of ''func_type_args()'', which returns a list of type-hints pertaining to the current generic function call or constructor invocation. This complements ''func_get_args()'' by providing the list of type-arguments as fully-qualified class-names. | Note the addition of ''func_type_args()'', which returns a list of type-hints pertaining to the current generic function call or constructor invocation. This complements ''func_get_args()'' by providing the list of type-arguments as fully-qualified class-names. |
| |
TODO: decide whether or not [[https://en.wikipedia.org/wiki/Bounded_quantification|bounded polymorphism]] should be supported. | TODO: decide whether or not [[https://en.wikipedia.org/wiki/Bounded_quantification|bounded polymorphism]] should be supported. |
| |
| === Multiple Constraints === |
| |
| TODO: decide whether or not multiple constraints should be supported, e.g. with a Java-like syntax: |
| |
| <code php> |
| class A<T> where T is T1, T is T2 { |
| // ... |
| } |
| </code> |
| |
| This may relate to the [[https://wiki.php.net/rfc/union_types|union types RFC]] - if implemented, it may be more natural to expect support for union types as bounds. |
| |
==== Autoloading ==== | ==== Autoloading ==== |