Try/catch ----- <?php try { doTry(); } catch (A $b) { doCatchA(); } catch (B $c) { doCatchB(); } finally { doFinally(); } // no finally try { } catch (A $b) { } // no catch try { } finally { } ----- array( 0: Stmt_TryCatch( stmts: array( 0: Expr_FuncCall( name: Name( parts: array( 0: doTry ) ) args: array( ) ) ) catches: array( 0: Stmt_Catch( type: Name( parts: array( 0: A ) ) var: b stmts: array( 0: Expr_FuncCall( name: Name( parts: array( 0: doCatchA ) ) args: array( ) ) ) ) 1: Stmt_Catch( type: Name( parts: array( 0: B ) ) var: c stmts: array( 0: Expr_FuncCall( name: Name( parts: array( 0: doCatchB ) ) args: array( ) ) ) ) ) finallyStmts: array( 0: Expr_FuncCall( name: Name( parts: array( 0: doFinally ) ) args: array( ) ) ) ) 1: Stmt_TryCatch( stmts: array( ) catches: array( 0: Stmt_Catch( type: Name( parts: array( 0: A ) ) var: b stmts: array( ) ) ) finallyStmts: null comments: array( 0: // no finally ) ) 2: Stmt_TryCatch( stmts: array( ) catches: array( ) finallyStmts: array( ) comments: array( 0: // no catch ) ) )