php - 为什么我的整数在它们应该溢出之前就溢出了?

标签 php php-7

我在 Windows 7 上运行 PHP 7.0.8(VC14 x64 线程安全版本)。

echo PHP_INT_MAX; 显示 9223372036854775807,但这实际上似乎并不正确。根据 PHP documentation ,

If PHP encounters a number beyond the bounds of the integer type, it will be interpreted as a float instead.

但是当我在 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 中包含相关信息,我可以添加它。

最佳答案

在@Terminus 的有用评论之后,我尝试在 php.ini 中设置 xdebug.overload_var_dump=0。使用该设置,var_dump 产生了正确的输出。我突然想到我在测试期间忽略了简单地尝试 echo $large_number;,所以我重新打开了 overload_var_dump 并且 echo 产生了预期结果,而 var_dump 没有。

$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() doesn't show correct info about PHP_INT_MAX and PHP_INT_MIN constants on 64bit Windows

但这似乎是不完整的;它实际上显示了大量变量和常量的错误信息。

关于php - 为什么我的整数在它们应该溢出之前就溢出了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029282/

相关文章:

PHP 从 AJAX 图像 uploader 获取隐藏变量

php - Ubuntu 11.04 中的 MongoDB 和 php

php-extension - 安装mailparse php7 mbstring错误

php - 使用空合并运算符时如何进行类型转换?

php - 在打印之前检查 file_get_contents 返回

php - 当查询没有返回记录时,如何通过 PDO/Sqlite 获取列名?

php - 在 lucene 中存储用户数据或查询 rdbms?

php - 从 PHP 数组中获取最小值和最大值

php - 使用 static::MY_CONST vs self::MY_CONST vs SomeClass::MY_CONST 引用 PHP 7 中的常量

php - 如何在php中计算两个时间之间的差异并显示出来