internals2-php-opcodes-php-qm-assign-5

  • Opcode Descriptions and
    Examples
  • QM_ASSIGN

  • QM_ASSIGN
  • QM_ASSIGN

    QM_ASSIGN

    PHP code

    <?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 1011;
    }
    ?>

    PHP opcodes

    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