Re: [PHP] String conversion to integer

[email protected] (". .")
Newsgroups php.general
Message-ID <DBXPR06MB445CEFA17C7AF533A2FDE69EC980@DBXPR06MB445.eurprd06.prod.outlook.com>
Hi Kebin,


> I'm testing php 7.1 in my project, and I got a strange problem.

>
> $string = '584e82ed00819';
> echo (int)$string;
>
> The above code will output 9223372036854775807 (It's PHP_INT_MAX) in php
> 7.1.
> In php 5.5, the result is: 584.
>
> According to the document:
> http://php.net/manual/en/language.types.string.php#language.types.string.conversion
>
> I guess php 7.1 process the string as 584e82, but 5.5 did not.
> Any differences for string conversion between 7.1 and 5.5 ?

Yes, PHP 7.1 brings the change of string casting now recognising scientific
notation. A brief mention of this is made in the migration guide:
"
Integer operations and conversions on numerical strings now respect scientific
notation. This also includes the (int) cast operation, and the following functions:
intval() (where the base is 10), settype(), decbin(), decoct(), and dechex().
"

For more reasoning on why this change has been made, you can view the Warn
about invalid strings in arithmetic RFC[1], specifically the "Fractional and scientific
notation strings with integer operators" subsection.

Thanks,
Tom

[1]: https://wiki.php.net/rfc/invalid_strings_in_arithmetic
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.