今天我注意到了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 –