Both sides previous revisionPrevious revisionNext revision | Previous revision |
rfc:invalid_strings_in_arithmetic [2016/03/21 11:22] – fix opcache wording ajf | rfc:invalid_strings_in_arithmetic [2017/09/22 13:28] (current) – external edit 127.0.0.1 |
---|
* Date: 2016-01-08 | * Date: 2016-01-08 |
* Author: Andrea Faulds, ajf@ajf.me | * Author: Andrea Faulds, ajf@ajf.me |
* Status: In Voting | * Status: Implemented (PHP 7.1) |
* First Published at: http://wiki.php.net/rfc/invalid_strings_in_arithmetic | * First Published at: http://wiki.php.net/rfc/invalid_strings_in_arithmetic |
| |
This inconsistency is unintuitive, and becomes a greater problem if we add warnings and notices for non-numeric strings, as some operators would tell you strings like ''"1.2345e9"'' and ''"-123.45"'' are non-well-formed, whereas other operators would happily accept such strings. | This inconsistency is unintuitive, and becomes a greater problem if we add warnings and notices for non-numeric strings, as some operators would tell you strings like ''"1.2345e9"'' and ''"-123.45"'' are non-well-formed, whereas other operators would happily accept such strings. |
| |
To avoid this problem, this RFC proposes use ''is_numeric_string_ex'' instead of ''strtol'' for the integer operators and integer casts (<php>intval()</php> with <php>$base</php> = 10, <php>(int)</php>, <php>settype()</php>, etc.), resolving the inconsistency. This also affects the Zend Engine C functions ''zval_get_long'' and ''convert_to_long'', and so PHP functions which uses these internal functions are also affected, including <php>decbin()</php>, <php>decoct()</php> and <php>dechex()</php>. | To avoid this problem, this RFC proposes to use ''is_numeric_string_ex'' instead of ''strtol'' for the integer operators and integer casts (<php>intval()</php> with <php>$base</php> = 10, <php>(int)</php>, <php>settype()</php>, etc.), resolving the inconsistency. This also affects the Zend Engine C functions ''zval_get_long'' and ''convert_to_long'', and so PHP functions which uses these internal functions are also affected, including <php>decbin()</php>, <php>decoct()</php> and <php>dechex()</php>. |
| |
===== Backward Incompatible Changes ===== | ===== Backward Incompatible Changes ===== |
As this is a language change, the RFC requires a 2/3 majority to pass. | As this is a language change, the RFC requires a 2/3 majority to pass. |
| |
Voting started on 2016-03-20 and will end on 2016-03-28. | Voting started on 2016-03-20 and ended on 2016-03-28. |
| |
<doodle title="Accept the ‘Warn about invalid strings in arithmetic’ v1.1 RFC for PHP 7.1?" auth="ajf" voteType="single" closed="false"> | <doodle title="Accept the ‘Warn about invalid strings in arithmetic’ v1.1 RFC for PHP 7.1?" auth="ajf" voteType="single" closed="true"> |
* Yes | * Yes |
* No | * No |
| |
===== Implementation ===== | ===== Implementation ===== |
After the project is implemented, this section should contain | |
- the version(s) it was merged to | The interpreter patch was merged into 7.1 here: https://github.com/php/php-src/commit/1e82ad8038d3100b7e27be870652c1f639a7200a |
- a link to the git commit(s) | |
- a link to the PHP manual entry for the feature | The UPGRADING file notes can be found here (more extensive than in the previously-linked patch), see sections 1 and 2: https://github.com/php/php-src/blob/0105bd20b706c8ab5b0a71f59f11a9dabe735f6b/UPGRADING |
| |
| The corresponding mention in the manual can be found here: http://php.net/manual/en/migration71.other-changes.php |
| |
| The language specification patch was merged into 7.1 here: https://github.com/php/php-langspec/commit/a3ea4e992f43ea9083c3fe3738a5ded03412f6e1 |
| |
===== References ===== | ===== References ===== |