Я запускаю PHP 7.0.8 (версия VC14 x64 Thread Safe) в Windows 7.
echo PHP_INT_MAX;
показывает 9223372036854775807
, но на самом деле это не кажется правильным. Согласно документации PHP ,
Если PHP встречает число за пределами целочисленного типа, оно будет интерпретироваться как float.
но когда я запускаю код из документации, демонстрирующей целочисленное переполнение в 32-разрядной системе, это не то, что происходит.
$large_number = 2147483647;
var_dump($large_number); // expected: int(2147483647) actual: int (2147483647)
$large_number = 2147483648;
var_dump($large_number); // expected: float(2147483648) actual: int (-2147483648)
Еще более странно, другой пример из документов:
$large_number = 9223372036854775807;
var_dump($large_number); // expected: int(9223372036854775807) actual: int(-1)
$large_number = 9223372036854775808;
var_dump($large_number);
// expected: float(9.2233720368548E+18), actual: float(9.2233720368548E+18)
Является ли это ошибкой, или я что-то не понимаю? Единственная аналогичная ошибка, о которой я столкнулся, имеет неправильный вывод var_dump(PHP_INT_MAX)
с xdebug (который присутствует в моей версии), но это doesn ' Кажется, это объясняет, что происходит здесь. Если кто-нибудь знает о соответствующей информации, которую я должен включить из phpinfo
, я могу добавить ее.