今日、私は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をインクリメントしてから返します。