PHP文档here声明:
如果PHP遇到超出整数类型边界的数字,它将被解释为浮点数。此外,导致超出整数类型边界的数字的操作将返回浮点数。
但是导致数量小于PHP_INT_MAX的操作呢?
请参阅此代码段作为示例:
$max_int = 2**31-1 ; // 2147483647
var_dump(PHP_INT_MAX === $max_int); // false
正如您所看到的,即使操作导致有效的int值,PHP似乎也会将结果转换为float
var_dump(PHP_INT_MAX === (int) $max_int) // true
我的问题:
在进行任何计算之前,PHP解释器是否将结果转换为浮点数?
PHP不应该计算结果,然后相应地设置类型? (说得对吗?)
编辑:
PHP版本:7.2.1 32位
操作系统:Windows:10 x64
我正在使用XAMPP
在计算$max_int = 2**31-1
时,引擎会按步骤执行此操作:
$tmp = 2**31;
$max_int = $tmp-1
这里$tmp
大于最大整数值并转换为floatng点数。结果是浮点减法,导致浮动。由于它是漂浮的,它必须保持浮动。