Traits ----- <?php trait A { public function a() {} } class B { use C; use D { a as protected b; c as d; e as private; } use E, F, G { E::a insteadof F, G; E::b as protected c; E::d as e; E::f as private; } } ----- array( 0: Stmt_Trait( name: A stmts: array( 0: Stmt_ClassMethod( type: 1 byRef: false name: a params: array( ) returnType: null stmts: array( ) ) ) ) 1: Stmt_Class( type: 0 name: B extends: null implements: array( ) stmts: array( 0: Stmt_TraitUse( traits: array( 0: Name( parts: array( 0: C ) ) ) adaptations: array( ) ) 1: Stmt_TraitUse( traits: array( 0: Name( parts: array( 0: D ) ) ) adaptations: array( 0: Stmt_TraitUseAdaptation_Alias( trait: null method: a newModifier: 2 newName: b ) 1: Stmt_TraitUseAdaptation_Alias( trait: null method: c newModifier: null newName: d ) 2: Stmt_TraitUseAdaptation_Alias( trait: null method: e newModifier: 4 newName: null ) ) ) 2: Stmt_TraitUse( traits: array( 0: Name( parts: array( 0: E ) ) 1: Name( parts: array( 0: F ) ) 2: Name( parts: array( 0: G ) ) ) adaptations: array( 0: Stmt_TraitUseAdaptation_Precedence( trait: Name( parts: array( 0: E ) ) method: a insteadof: array( 0: Name( parts: array( 0: F ) ) 1: Name( parts: array( 0: G ) ) ) ) 1: Stmt_TraitUseAdaptation_Alias( trait: Name( parts: array( 0: E ) ) method: b newModifier: 2 newName: c ) 2: Stmt_TraitUseAdaptation_Alias( trait: Name( parts: array( 0: E ) ) method: d newModifier: null newName: e ) 3: Stmt_TraitUseAdaptation_Alias( trait: Name( parts: array( 0: E ) ) method: f newModifier: 4 newName: null ) ) ) ) ) )