Re: [RFC] Saner numeric strings
| From: | G. P. B. | Date: | Wed, 01 Jul 2020 14:26:35 +0000 |
| Subject: | Re: [RFC] Saner numeric strings | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-110802@lists.php.net to get a copy of this message | ||
Hello again,
While reviewing the implementation Nikita spotted a peculiar behaviour that
PHP currently has in regards to string offsets.
The offset is validated using the is_numeric_string but integer
representation of
it is computed using an explicit int cast, this is what leads to the
E_NOTICE in
a roundabout way.
Therefore, a string offset access such as $str['2str'] or $str['2.5'] would
still
evaluate to 2 under the current implementation but would generate an
E_WARNING "Illegal string offset".
The question becomes should such string offsets evaluate to 0 or not.
The answer isn't that straight forward as a float index like 14.5 would also
emit the same warning but evaluate to 14.
I see 3 options:
1. Keep the current behaviour which emit the E_WARNING "Illegal string
offset" and use the explicit int cast for both types of offsets ( '2str'
and '2.5'), which would bring the behaviour of leading integer numeric
strings in line with the one for float numeric strings.
2. Emit the E_WARNING "Illegal string offset" and evaluate to 0 for
offsets like '2str', and emit the E_WARNING "String offset cast
occurred" for float numeric strings like '2.5'
3. Emit the E_WARNING "Illegal string offset" and evaluate to 0 for
non-numeric integer strings.
As this is relatively tricky and all of the options have some change in
behaviour compared to PHP 7 feedback would be very much appreciated.
I'll amend the RFC to detail this behaviour.
Best regards
George P. Banyard