internals2-php-opcodes-php-throw-7

  • Opcode Descriptions and
    Examples
  • THROW

  • THROW
  • THROW

    THROW

    PHP code

    <?php
    /*
     * 
     * opcode number: 108
     */
    try {
        
    $error 'Always throw this error';
        throw new 
    Exception($error);

        // Code following an exception is not executed.
        
    echo 'Never executed';

    } catch (Exception $e) {
        echo 
    'Caught exception: ',  $e->getMessage(), "\n";
    }

    // Continue execution
    echo 'Hello World';
    ?>

    PHP opcodes

    Function name: (null)

    Compiled variables: !0=$error, !1=$e

    line # op fetch ext return operands
    7 0 ASSIGN       !0,’Always+throw+this+error’
    8 1 ZEND_FETCH_CLASS     :1 ‘Exception’
      2 NEW     $2 :1
      3 SEND_VAR       !0
      4 DO_FCALL_BY_NAME   1    
      5 ZEND_THROW   0   $2
    11 6 ECHO       ‘Never+executed’
    13 7 JMP       ->15
      8 ZEND_FETCH_CLASS     :4 ‘Exception’
      9 ZEND_CATCH   15   $4,!1
    14 10 ECHO       ‘Caught+exception%3A+’
      11 ZEND_INIT_METHOD_CALL       !1,’getMessage’
      12 DO_FCALL_BY_NAME   0    
      13 ECHO       $6
      14 ECHO       ‘%0A’
    18 15 ECHO       ‘Hello+World’
    19 16 RETURN       1