この記事では、VLD ツールを使用して php のオペコードを分析し、その理由を説明します。まず、
T1.php コード
$i+$i++; を投稿します。
Vld コード 演算数: 5 コンパイル済み変数: !0 = $i line # * op fetch ext return オペランド ---------------- ---------------------------------------------------- --------- -------- 2 0 > 割り当て~2 !0, ~1 3 4 パス #1: 0、 T2.php コード $i = 1; $i+$i+$i++ Vld2 コード 演算数: 6 コンパイル済み変数: !0 = $i line # * op fetch extオペランドを返す --------------------- ------------------------------------- -------------------------------- gt;2 POST_INC 3 ADD ~3
4 5 > RETURN 2- 4; eop: 5 path #1: 0、 2 つの写真 2 と 4 を比較してみましょう。なぜ結果があなたを驚かせるのか 最初に 1 と 2 の実行結果を分析します まず $i に値 1 が割り当てられ、$i++ がインクリメントされ、結果 1 が一時変数 ~1 ($i) にコピーされます)、$i が 2 に増分されます。つまり、0=2、最終結果は ~2 = ~1+! まず 3,4 を分析しましょう i に値 1 が割り当てられ、$i+$i = !0+!0 == ~1 == 2 され、$i++ がインクリメントされ、結果 1 が一時変数 ~2 ($i) にコピーされます。最終結果 ~1+~2 == 2+1 ===3;