今天我注意到了php中的一个模糊问题。我跑这个代码php的奇怪行为
$i = 5;
$i = $i ++;
var_dump($i); //output 5 instead of 6
让我们假设初始值为$i is 5
。现在新的值应该是6,但事实上原来是5
。当我在C++
中做了同样的事情时,我按预期得到了6
。 这是多少年来一直未被注意到的PHP中的一些错误,还是它是一些其他的东西。有人可以解释吗?
今天我注意到了php中的一个模糊问题。我跑这个代码php的奇怪行为
$i = 5;
$i = $i ++;
var_dump($i); //output 5 instead of 6
让我们假设初始值为$i is 5
。现在新的值应该是6,但事实上原来是5
。当我在C++
中做了同样的事情时,我按预期得到了6
。 这是多少年来一直未被注意到的PHP中的一些错误,还是它是一些其他的东西。有人可以解释吗?
Check out the manual for incrementation/decrementation operators。你所问的行为是正常的,只是作为C++开发者违背你的直觉。
$ i ++ 第一个返回$ i的值,然后在返回之前执行并递增,而++ $ i递增$ i。
为什么你认为值应该是 6?
$i
正在增加,之前返回递增(因为你正在使用的后增量运算符),并分配给$i
价值。似乎合乎逻辑。
尝试
$i = ++$i;
,你会得到正确的结果。
的问题是,如果你做$i = $i++
然后$i
是语句后递增,但你在另一边将其分配到老,所以它不会继续增加变量
好问题,但看起来像非常容易出错的代码,必然会让人们感到困惑。要增加'$ i',请使用标准约定。选择'$ i ++'或'$ i + = 1'或'$ i = $ i + 1'(或其他明显的方法),而不是混合它们。分配后增量操作的结果看起来很奇怪。 – jheddings
不知道PHP,但在C++中,'i = i ++;'是未定义的。你得到的'6'是没有意义的。 – jrok
它应该像$ i = $ i ++与$ i = $ i相同,然后$ i ++即$ i = 5和$ i ++给出$ i = 6 –