PHP:$ i = $ i ++崩溃了服务器

时间:2010-01-04 11:11:21

标签: php

几年前,在我知道SO之前,这件事发生在我身上,但我仍然很好奇。当我还在学习PHP的基础知识时,我偶然输入了$i = $i++;当我在浏览器中测试网页时,服务器崩溃了,需要很长时间才能恢复。我之前输入了一些非常愚蠢的东西并创建了一堆无限循环,但由于某种原因,这是最糟糕的。有谁知道为什么这条线是如此'有毒'

3 个答案:

答案 0 :(得分:7)

$i = $i++;基本上与$i = $i;相同。

不幸的是$i = $i++;被称为"undefined behavior"

任何事情都可能发生,因为编译器无法完全理解正在发生的事情。

有一个很好的SO问题,涵盖类似的未定义行为here

答案 1 :(得分:2)

这不应该崩溃。

$i = $i++;
var_dump($i); // NULL;

来自PHP Manual

  

没有必要初始化   PHP中的变量然而它是非常的   良好的做法。未初始化的变量   具有其类型的默认值   取决于他们的背景   使用。

此外,by default, variables are always assigned by value并且由于您使用的是Post Increment,因此未初始化的$ i(NULL)的值首先按副本分配给$ i,从而有效地覆盖自身。请参阅此代码以了解会发生什么:

$i = 0
$i = $i++;
var_dump($i); // int(0);

我不知道PHP在分配后是否仍会尝试增加右侧变量值。如果您对此感兴趣,请安装PECL扩展Parsekit并查看OP代码以获取更多详细信息。

因此可能还有其他东西使您的服务器崩溃。

答案 2 :(得分:0)

$ php -r '$i=0; $i = $i++; echo "=> ".$i."\n";'
=> 0