rfc:parameter-no-type-variance
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
rfc:parameter-no-type-variance [2016/11/21 09:27] – created kelunik | rfc:parameter-no-type-variance [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== PHP RFC: Your Title Here ====== | + | ====== PHP RFC: Parameter Type Widening |
- | * Version: 0.1 | + | * Version: 0.3 |
- | * Date: 2016-11-21 | + | * Date: 2017-01-03 |
- | * Author: Niklas Keller < | + | * Authors: Niklas Keller < |
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
- | |||
- | ===== Introduction ===== | ||
- | PHP doesn' | ||
===== Proposal ===== | ===== Proposal ===== | ||
- | This RFC proposes to allow ommiting the type entirely | + | PHP currently doesn' |
- | ===== Backward Incompatible Changes ===== | + | This RFC proposes to allow omitting a type entirely in a subclass, as dropping all parameter constraints is always valid according to the contravariance rule. |
- | None. | + | |
- | ===== Proposed PHP Version(s) ===== | + | Implementing this RFC would allow libraries to be upgraded to use type declarations in their method signatures. Currently adding types to a method of a class in a library would break any code that extends that class. |
- | Next minor version, currently 7.2. | + | |
- | ===== RFC Impact ===== | + | This would provide an easier upgrade path for libraries to start using scalar types, to replace manual checks being done inside the methods, without requiring an update for all sub-classes. |
- | ==== To SAPIs ==== | + | |
- | None. | + | |
- | ==== To Existing Extensions ==== | + | Another example of this being useful is '' |
- | None. | + | |
- | ==== To Opcache ==== | + | A change was made to the '' |
- | None. | + | |
- | ==== New Constants ==== | ||
- | None. | ||
- | ==== php.ini Defaults | + | ==== Example |
- | None. | + | |
- | ===== Open Issues | + | <code php> |
+ | <?php | ||
+ | |||
+ | class ArrayClass { | ||
+ | public function foo(array $foo) { /* ... */ } | ||
+ | } | ||
+ | |||
+ | |||
+ | // This RFC proposes allowing the type to be widened to be untyped aka any | ||
+ | // type can be passed as the parameter. | ||
+ | // Any type restrictions can be done via user code in the method body. | ||
+ | class EverythingClass extends ArrayClass { | ||
+ | public function foo($foo) { /* ... */ } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | **Current Result** | ||
+ | |||
+ | '' | ||
+ | |||
+ | **Proposed Result** | ||
+ | |||
+ | Compiles without a warning. | ||
+ | |||
+ | ===== Backward Incompatible Changes | ||
None. | None. | ||
+ | |||
+ | ===== Proposed PHP Version(s) ===== | ||
+ | Next version, currently 7.2. | ||
===== Future Scope ===== | ===== Future Scope ===== | ||
- | In the future there might be support for contra-variance / co-variance for parameters / return types. | + | Unfortunately " |
- | ===== Proposed | + | ===== Voting ===== |
Requires a 2/3 majority. | Requires a 2/3 majority. | ||
- | ===== Patches and Tests ===== | + | <doodle title=" |
- | TBD. | + | * Yes |
+ | * No | ||
+ | </ | ||
- | ===== Implementation ===== | + | Voting started on 9th of January but has been stopped due to the mailing list failures. Voting has been resumed on 11th of January and has ended on 31th of January. |
- | TBD. | + | |
- | ===== References | + | ===== Patches and Tests ===== |
- | None. | + | |
- | ===== Rejected Features | + | * https:// |
- | None. | + | |
+ | ===== Implementation | ||
+ | - Merged into PHP 7.2 | ||
+ | - https:// |
rfc/parameter-no-type-variance.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1