rfc:scalar_type_hints
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:scalar_type_hints [2015/02/03 00:32] – Clarity on inclusion in Example ajf | rfc:scalar_type_hints [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PHP RFC: Scalar Type Hints ====== | ====== PHP RFC: Scalar Type Hints ====== | ||
- | * Version: 0.3 | + | * Version: 0.3.1 |
- | * Date: 2014-12-14 (initial draft; put Under Discussion 2014-12-31; version 0.2 created 2015-01-13) | + | * Date: 2014-12-14 (initial draft; put Under Discussion 2014-12-31; version 0.2 created 2015-01-13; withdrawn 2015-02-15) |
* Author: Andrea Faulds, ajf@ajf.me | * Author: Andrea Faulds, ajf@ajf.me | ||
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
Line 98: | Line 98: | ||
declare(strict_types=1) { | declare(strict_types=1) { | ||
// explicitly strictly type-checked code | // explicitly strictly type-checked code | ||
- | |||
- | makeEllie(); | ||
| | ||
$nelly = new ElePHPant(12345, | $nelly = new ElePHPant(12345, | ||
Line 188: | Line 186: | ||
==== History ==== | ==== History ==== | ||
- | PHP has had parameter type hints for class names since PHP 5.0, arrays since PHP 5.1 and callables since PHP 5.4. These type hints allow the PHP runtime to ensure that correctly-typed arguments are passed to functions, and make function signatures more informative. Unfortunately, | + | PHP has had parameter type hints for interface and class names since PHP 5.0, arrays since PHP 5.1 and callables since PHP 5.4. These type hints allow the PHP runtime to ensure that correctly-typed arguments are passed to functions, and make function signatures more informative. Unfortunately, |
There have been some previous attempts at adding scalar type hints, such as the [[rfc: | There have been some previous attempts at adding scalar type hints, such as the [[rfc: | ||
Line 401: | Line 399: | ||
This doesn' | This doesn' | ||
- | When the strict type-checking mode isn't in use (which is the default), function calls behave identically to previous PHP versions. | + | When the strict type-checking mode isn't in use (which is the default), function calls to built-in and extension PHP functions |
===== Open Issues ===== | ===== Open Issues ===== | ||
- | There is currently an open issue related to naming, described below. This will probably | + | There is currently an open issue related to naming, described below. This will go to a vote. |
This RFC and patch allows the aliases '' | This RFC and patch allows the aliases '' | ||
Line 412: | Line 410: | ||
* Produce a different error message on strict type hint failure vs. on weak type hint failure, lest debugging be a pain. For practical reasons we may not be able to change the weak one, as it is an existing message (should we?). | * Produce a different error message on strict type hint failure vs. on weak type hint failure, lest debugging be a pain. For practical reasons we may not be able to change the weak one, as it is an existing message (should we?). | ||
- | * Return types need tests. | + | * Return types need more tests. |
===== Future Scope ===== | ===== Future Scope ===== | ||
Line 418: | Line 416: | ||
Because scalar type hints guarantee that a passed argument will be of a certain type within a function body (at least initially), this could be used in the Zend Engine for optimisations. For example, if a function takes two '' | Because scalar type hints guarantee that a passed argument will be of a certain type within a function body (at least initially), this could be used in the Zend Engine for optimisations. For example, if a function takes two '' | ||
- | ===== Proposed | + | In discussions around this RFC, the '' |
+ | |||
+ | Another issue that came up is PHP's lack of a typehint for numbers (which also came up with the previous Scalar Type Hinting with Cast RFC). I plan to propose a '' | ||
+ | |||
+ | ===== Vote ===== | ||
+ | |||
+ | As this is a language change, this RFC requires a 2/3 majority to pass. Voting | ||
+ | |||
+ | ==== Main ==== | ||
+ | |||
+ | This vote is for the RFC itself. | ||
+ | |||
+ | <doodle title=" | ||
+ | * Yes | ||
+ | * No | ||
+ | </ | ||
+ | |||
+ | ==== Type aliases ==== | ||
+ | |||
+ | This second vote is to solve the open issue regarding the '' | ||
+ | |||
+ | <doodle title=" | ||
+ | * Allow synonyms | ||
+ | * Reserve synonyms and produce error message when used | ||
+ | * Do not reserve | ||
+ | </ | ||
+ | |||
+ | ==== Reserve for future use ==== | ||
+ | |||
+ | This final vote is in case the RFC fails to pass. It's a 2/3 majority-required backwards compatibility-breaking language change, which is to reserve the type hint names proposed by the RFC, so that a future RFC could implement scalar type hints without requiring a backwards compatibility break. The type names reserved include the synonyms '' | ||
- | As this is a language change, this RFC requires a 2/3 majority to pass. It will be a Yes/No vote. | + | <doodle title=" |
+ | | ||
+ | * No | ||
+ | </doodle> | ||
===== Patches and Tests ===== | ===== Patches and Tests ===== | ||
- | There is a working, but incomplete | + | There is a working, but possibly buggy php-src pull request with tests here: https:// |
- | There is no language specification patch. | + | There is no language specification patch as yet. |
===== Implementation ===== | ===== Implementation ===== | ||
Line 440: | Line 470: | ||
===== Changelog ===== | ===== Changelog ===== | ||
+ | * v0.3.1 - Noted '' | ||
* v0.3 - Return types support | * v0.3 - Return types support | ||
* v0.2.3 - '' | * v0.2.3 - '' |
rfc/scalar_type_hints.1422923570.txt.gz · Last modified: 2017/09/22 13:28 (external edit)