至少在我的机器上:
$var = PHP_INT_MAX;
var_dump($var);
$var++;
var_dump((int)$var);
$var += 10;
var_dump((int)$var);
$var += 10000;
var_dump((int)$var);
结果:
int(9223372036854775807)
int(-9223372036854775808)
int(-9223372036854775808)
int(-9223372036854765568)
为什么这种行为如此疯狂?我可以理解它每次都会回退PHP_MIN_INT,但是如果你添加某些数字就会改变它?
我在这里运行此代码时得到这些结果:
答案 0 :(得分:2)
它未定义,因为float不适合整数。任何事情都可能发生。这只是PHP,带来了所有的怪癖。使用C中的(long)
强制转换操作来实现强制转换操作,在这种情况下未定义,因此您不应该依赖任何特定行为(事实上,在某些平台上,如MIPS64,这将导致CPU异常,这将停止PHP)。
来源:http://www.php.net/manual/en/language.types.integer.php#language.types.integer.casting.from-float
答案 1 :(得分:0)
已更新
关于我无法分辨的最后2行,但是否定结果很可能是由有符号整数表示和算术引起的。阅读更多相关信息here。
答案 2 :(得分:0)
$var = PHP_INT_MAX;
var_dump($var);
$var--;
var_dump($var);
$var -= 10;
var_dump((int)$var);
$var -= 10000;
var_dump($var);
如果我们要改变+ - 代码工作正常...这意味着在最大值之后不能加上甚至1,因为没有分配内存大小