$i++ および ++$i の PHP 分析

巴扎黑
巴扎黑オリジナル
2016-11-21 15:10:591486ブラウズ

この記事では、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;

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。