PHP - Manual: QM_ASSIGN
2024-12-20
<?php
/*
* Question Mark Assign, used twice inside a question mark assign to temporarily assign result as value1 (this is followed up with an ASSIGN bytecode)
* opcode number: 22
*/
function A(){
echo 1?2:3;
}
function B(){
$b = 0;
$a = $b > 1 ? 10: 11;
}
?>
Function name: (null)
Compiled variables: none
line | # | op | fetch | ext | return | operands |
---|---|---|---|---|---|---|
6 | 0 | NOP | ||||
10 | 1 | NOP | ||||
14 | 2 | RETURN | 1 |
Function name: A
Compiled variables: none
line | # | op | fetch | ext | return | operands |
---|---|---|---|---|---|---|
7 | 0 | JMPZ | 1,->3 | |||
1 | QM_ASSIGN | ~0 | 2 | |||
2 | JMP | ->4 | ||||
3 | QM_ASSIGN | ~0 | 3 | |||
4 | ECHO | ~0 | ||||
8 | 5 | RETURN | null |
Function name: B
Compiled variables: !0=$b, !1=$a
line | # | op | fetch | ext | return | operands |
---|---|---|---|---|---|---|
11 | 0 | ASSIGN | !0,0 | |||
12 | 1 | IS_SMALLER | ~1 | 1,!0 | ||
2 | JMPZ | ~1,->5 | ||||
3 | QM_ASSIGN | ~2 | 10 | |||
4 | JMP | ->6 | ||||
5 | QM_ASSIGN | ~2 | 11 | |||
6 | ASSIGN | !1,~2 | ||||
13 | 7 | RETURN | null |
官方地址:https://www.php.net/manual/en/internals2.opcodes.qm-assign.php