今日、私はphpのあいまいさに気づきました。このコードを実行しました
$i = 5;
$i = $i ++;
var_dump($i); //output 5 instead of 6
の初期値を想定します$i is 5
。これで、新しい値は6になるはずですが、実際には。であることがわかります5
。私が同じことをしたとき、C++
私は6
期待通りになりました。何年もの間見過ごされてきたphpのバグなのか、それとも他の何かなのか。誰か説明してもらえますか?
なぜ値は6であると思いますか?
$i
がインクリメントされている場合、インクリメント前の値が返され(ポストインクリメント演算子を使用しているため)、に割り当てられ$i
ます。論理的なようです。
試す
$i = ++$i;
正しい結果が得られます。
問題は、$i = $i++
そうすると$i
、ステートメントの後にインクリメントされますが、反対側の古いものに割り当てているため、変数をインクリメントすることはできません。
インクリメント/デクリメント演算子については、マニュアルを確認してください。あなたが求める振る舞いは正常であり、C++開発者としてのあなたの直感に反するだけです。
$ i++は最初に$iの値を返し、次に実行してインクリメントしますが、++$iは$iをインクリメントしてから返します。