2012-11-07 121 views
1

今天我注意到了php中的一个模糊问题。我跑这个代码php的奇怪行为

$i = 5; 
$i = $i ++; 
var_dump($i); //output 5 instead of 6 

让我们假设初始值为$i is 5。现在新的值应该是6,但事实上原来是5。当我在C++中做了同样的事情时,我按预期得到了6。 这是多少年来一直未被注意到的PHP中的一些错误,还是它是一些其他的东西。有人可以解释吗?

+2

好问题,但看起来像非常容易出错的代码,必然会让人们感到困惑。要增加'$ i',请使用标准约定。选择'$ i ++'或'$ i + = 1'或'$ i = $ i + 1'(或其他明显的方法),而不是混合它们。分配后增量操作的结果看起来很奇怪。 – jheddings

+4

不知道PHP,但在C++中,'i = i ++;'是未定义的。你得到的'6'是没有意义的。 – jrok

+0

它应该像$ i = $ i ++与$ i = $ i相同,然后$ i ++即$ i = 5和$ i ++给出$ i = 6 –

回答

5

为什么你认为值应该是 6?

$i正在增加,之前返回递增(因为你正在使用的后增量运算符),并分配给$i价值。似乎合乎逻辑。

3

尝试

$i = ++$i; 

,你会得到正确的结果。

的问题是,如果你做$i = $i++然后$i是语句后递增,但你在另一边将其分配到老,所以它不会继续增加变量