Hi Davey,

Davey Shafik wrote:
You mention no support for numeric strings, but how will settype($string,
int|float), intval(), floatval(), is_numeric() and ctype_digit() work with
this change?

I do think if you don't change the semantics for strings to number
conversion (which I agree you can't due to BC breaks) there should be an
explicit way to support "1_000_000" => (int) 1_000_000. This should be part
of the RFC.

I presume that if you were to go from numeric to string the underscores
would be stripped? What about a way not to do that? What will var_dump()
etc. show?

Numeric string conversions, in all their forms (I'm including intval() and such here) don't follow the same rules as PHP's integer and float literals. This isn't at all new. Here's some examples of existing differences between literals and numeric strings:

- "0x123" != 0x123

  Hexadecimal isn't supported in numeric strings.

- "-0.0" != -0.0

  PHP's numeric literals do not have signs. Rather, a preceding - or +
  symbol is parsed as a unary minus/plus. Before PHP 7.0.2, negating
  a floating-point zero did not produce negative zero, which was
  incorrect behaviour.
  PHP's numeric string parser, however, *does* support signs, and
  interprets "-0.0" is meaning negative zero.

- "0123" != 0123

  Octal isn't supported in numeric strings.

- "0b101" != 0b101

  Binary isn't supported in numeric strings.

- 0 + "-9223372036854775808" !== -9223372036854775808

  As previously mentioned, PHP's numeric literals lack signs. Here, this
  means that -9223372036854775808 is parsed as -(9223372036854775808).
  9223372036854775808 is too large to be an integer, so it is a float.
  However, PHP's numeric string parser does support signs, and
  "-9223372036854775808" fits within the range of an integer.

As you can see, not supporting _ as a number separator here would not be terribly surprising. It would also be a backwards-compatibility break: currently, (int)"123_4" is parsed as 123, but it would be 1234 if we changed the coercion rules.

Thanks.

--
Andrea Faulds
http://ajf.me/

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to