Property hooks ----- 42; set => $value; } abstract $prop3 { &get; set; } public $prop4 { final get { return 42; } set(string $value) { } } } ----- array( 0: Stmt_Class( attrGroups: array( ) flags: 0 name: Identifier( name: Test ) extends: null implements: array( ) stmts: array( 0: Stmt_Property( attrGroups: array( ) flags: PUBLIC (1) type: null props: array( 0: PropertyItem( name: VarLikeIdentifier( name: prop ) default: null ) ) hooks: array( 0: PropertyHook( attrGroups: array( ) flags: 0 byRef: false name: Identifier( name: get ) params: array( ) body: array( 0: Stmt_Return( expr: Scalar_Int( value: 42 ) ) ) ) 1: PropertyHook( attrGroups: array( ) flags: 0 byRef: false name: Identifier( name: set ) params: array( ) body: array( 0: Stmt_Echo( exprs: array( 0: Expr_Variable( name: value ) ) ) ) ) ) ) 1: Stmt_Property( attrGroups: array( ) flags: PRIVATE (4) type: null props: array( 0: PropertyItem( name: VarLikeIdentifier( name: prop2 ) default: null ) ) hooks: array( 0: PropertyHook( attrGroups: array( ) flags: 0 byRef: false name: Identifier( name: get ) params: array( ) body: Scalar_Int( value: 42 ) ) 1: PropertyHook( attrGroups: array( ) flags: 0 byRef: false name: Identifier( name: set ) params: array( ) body: Expr_Variable( name: value ) ) ) ) 2: Stmt_Property( attrGroups: array( ) flags: ABSTRACT (16) type: null props: array( 0: PropertyItem( name: VarLikeIdentifier( name: prop3 ) default: null ) ) hooks: array( 0: PropertyHook( attrGroups: array( ) flags: 0 byRef: true name: Identifier( name: get ) params: array( ) body: null ) 1: PropertyHook( attrGroups: array( ) flags: 0 byRef: false name: Identifier( name: set ) params: array( ) body: null ) ) ) 3: Stmt_Property( attrGroups: array( ) flags: PUBLIC (1) type: null props: array( 0: PropertyItem( name: VarLikeIdentifier( name: prop4 ) default: null ) ) hooks: array( 0: PropertyHook( attrGroups: array( ) flags: FINAL (32) byRef: false name: Identifier( name: get ) params: array( ) body: array( 0: Stmt_Return( expr: Scalar_Int( value: 42 ) ) ) ) 1: PropertyHook( attrGroups: array( ) flags: 0 byRef: false name: Identifier( name: set ) params: array( 0: Param( attrGroups: array( ) flags: 0 type: Identifier( name: string ) byRef: false variadic: false var: Expr_Variable( name: value ) default: null hooks: array( ) ) ) body: array( ) ) ) ) ) ) ) ----- 42; } } ----- get hook must not have a parameter list from 4:12 to 4:12 array( 0: Stmt_Class( attrGroups: array( ) flags: 0 name: Identifier( name: Test ) extends: null implements: array( ) stmts: array( 0: Stmt_Property( attrGroups: array( ) flags: PUBLIC (1) type: null props: array( 0: PropertyItem( name: VarLikeIdentifier( name: prop ) default: null ) ) hooks: array( 0: PropertyHook( attrGroups: array( ) flags: 0 byRef: false name: Identifier( name: get ) params: array( ) body: Scalar_Int( value: 42 ) ) ) ) ) ) ) ----- bar; } } ----- Unknown hook "FOO", expected "get" or "set" from 3:20 to 3:22 array( 0: Stmt_Class( attrGroups: array( ) flags: 0 name: Identifier( name: Test ) extends: null implements: array( ) stmts: array( 0: Stmt_Property( attrGroups: array( ) flags: PUBLIC (1) type: null props: array( 0: PropertyItem( name: VarLikeIdentifier( name: prop ) default: null ) ) hooks: array( 0: PropertyHook( attrGroups: array( ) flags: 0 byRef: false name: Identifier( name: FOO ) params: array( ) body: Expr_ConstFetch( name: Name( name: bar ) ) ) ) ) ) ) ) -----