私は簡単なコードのオペコードを理解しようとしています。if文でPHPオペコードを理解する
コードは次のとおりです。
<?php
$a = TRUE;
$b = FALSE;
if($a && $b) {
echo 'done';
}
上記のコードのためのOPコードは次のとおりです。
php -dvld.active=1 test.php
Finding entry points
Branch analysis from position: 0
Jump found. Position 1 = 3, Position 2 = 4
Branch analysis from position: 3
Jump found. Position 1 = 5, Position 2 = 7
Branch analysis from position: 5
Jump found. Position 1 = 7
Branch analysis from position: 7
Return found
Branch analysis from position: 7
Branch analysis from position: 4
filename: /home/starlays/learning/test.php
function name: (null)
number of ops: 8
compiled vars: !0 = $a, !1 = $b
line # * op fetch ext return operands
---------------------------------------------------------------------------------
3 0 > ASSIGN !0, true
5 1 ASSIGN !1, false
7 2 > JMPZ_EX ~2 !0, ->4
3 > BOOL ~2 !1
4 > > JMPZ ~2, ->7
8 5 > ECHO 'done'
9 6 > JMP ->7
10 7 > > RETURN 1
branch: # 0; line: 3- 7; sop: 0; eop: 2; out1: 3; out2: 4
branch: # 3; line: 7- 7; sop: 3; eop: 3; out1: 4
branch: # 4; line: 7- 7; sop: 4; eop: 4; out1: 5; out2: 7
branch: # 5; line: 8- 9; sop: 5; eop: 6; out1: 7
branch: # 7; line: 10- 10; sop: 7; eop: 7
path #1: 0, 3, 4, 5, 7,
path #2: 0, 3, 4, 7,
path #3: 0, 4, 5, 7,
path #4: 0, 4, 7,
私は7行目で何が起こっているかを理解しようとしている、どのような評価が行われていますか?評価のためにifの式にいくつの値を入力しますか? 3つの値を入力するか、2つの値に$ aの値と$ bの値を入力し、ifのカッコからの式を後で評価しますか?
私はJMPZ_EXのマニュアルを読んでいますが、少し前にステップ2までオペコードで何が起こっているのか理解しています。それはちょっと混乱しています。やって
私が理解しなければならないもう一つのことは、オペレーションコード内のすべてのブランチは何ですか?そのすべてのブランチのどれが最後に使用されますか?
'&&'は短絡演算子です。 –
@ KarolyHorvath私が知っている、私はphpが上記のオペレーションコードからやっているステップを理解する必要があります。 – Starlays
私はちょうどあなたが既にそれがどのように振る舞うべきかを知っていると言っています... –