我在Windows 7上运行PHP 7.0.8(VC14 x64线程安全版)。
echo PHP_INT_MAX;
显示9223372036854775807
,但这似乎并不正确。根据PHP documentation,
如果PHP遇到超出整数类型边界的数字,它将被解释为浮点数。
但是当我从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)
这是一个错误,还是我误解了什么? The only similar bug我发现xdebug {存在于我的版本中} var_dump(PHP_INT_MAX)
的输出不正确,但这似乎并不能解释这里发生的事情。如果有人知道我应该包含phpinfo
的相关信息,我可以添加它。
答案 0 :(得分:5)
在@Terminus的有用评论之后,我尝试在php.ini中设置xdebug.overload_var_dump=0
。使用该设置,var_dump
生成了正确的输出。我突然想到在测试过程中忽略了echo $large_number;
,所以我重新开启了overload_var_dump
,echo
产生了预期的结果,var_dump
没有。{ / p>
$large_number = 2147483648;
echo $large_number; // 2147483648
var_dump($large_number); // int -2147483648
$large_number = 9223372036854775807;
echo $large_number; // 9223372036854775807
var_dump($large_number); // int -1
因此,我之前发现的错误报告似乎确实解释了这一点。错误报告中的原始描述说:
var_dump()在64位Windows上没有显示有关PHP_INT_MAX和PHP_INT_MIN常量的正确信息
但似乎这是不完整的;它实际上显示了大量变量和常量的错误信息。