Dereferencing of constants ----- length; A->length(); A[0]; A[0][1][2]; A{0}; A::B[0]; A::B[0][1][2]; A::B{0}; A::B->length; A::B->length(); A::B::C; A::B::$c; A::B::c(); __FUNCTION__[0]; __FUNCTION__->length; __FUNCIONT__->length(); ----- !!php7 array( 0: Stmt_Expression( expr: Expr_PropertyFetch( var: Expr_ConstFetch( name: Name( parts: array( 0: A ) ) ) name: Identifier( name: length ) ) ) 1: Stmt_Expression( expr: Expr_MethodCall( var: Expr_ConstFetch( name: Name( parts: array( 0: A ) ) ) name: Identifier( name: length ) args: array( ) ) ) 2: Stmt_Expression( expr: Expr_ArrayDimFetch( var: Expr_ConstFetch( name: Name( parts: array( 0: A ) ) ) dim: Scalar_LNumber( value: 0 ) ) ) 3: Stmt_Expression( expr: Expr_ArrayDimFetch( var: Expr_ArrayDimFetch( var: Expr_ArrayDimFetch( var: Expr_ConstFetch( name: Name( parts: array( 0: A ) ) ) dim: Scalar_LNumber( value: 0 ) ) dim: Scalar_LNumber( value: 1 ) ) dim: Scalar_LNumber( value: 2 ) ) ) 4: Stmt_Expression( expr: Expr_ArrayDimFetch( var: Expr_ConstFetch( name: Name( parts: array( 0: A ) ) ) dim: Scalar_LNumber( value: 0 ) ) ) 5: Stmt_Expression( expr: Expr_ArrayDimFetch( var: Expr_ClassConstFetch( class: Name( parts: array( 0: A ) ) name: Identifier( name: B ) ) dim: Scalar_LNumber( value: 0 ) ) ) 6: Stmt_Expression( expr: Expr_ArrayDimFetch( var: Expr_ArrayDimFetch( var: Expr_ArrayDimFetch( var: Expr_ClassConstFetch( class: Name( parts: array( 0: A ) ) name: Identifier( name: B ) ) dim: Scalar_LNumber( value: 0 ) ) dim: Scalar_LNumber( value: 1 ) ) dim: Scalar_LNumber( value: 2 ) ) ) 7: Stmt_Expression( expr: Expr_ArrayDimFetch( var: Expr_ClassConstFetch( class: Name( parts: array( 0: A ) ) name: Identifier( name: B ) ) dim: Scalar_LNumber( value: 0 ) ) ) 8: Stmt_Expression( expr: Expr_PropertyFetch( var: Expr_ClassConstFetch( class: Name( parts: array( 0: A ) ) name: Identifier( name: B ) ) name: Identifier( name: length ) ) ) 9: Stmt_Expression( expr: Expr_MethodCall( var: Expr_ClassConstFetch( class: Name( parts: array( 0: A ) ) name: Identifier( name: B ) ) name: Identifier( name: length ) args: array( ) ) ) 10: Stmt_Expression( expr: Expr_ClassConstFetch( class: Expr_ClassConstFetch( class: Name( parts: array( 0: A ) ) name: Identifier( name: B ) ) name: Identifier( name: C ) ) ) 11: Stmt_Expression( expr: Expr_StaticPropertyFetch( class: Expr_ClassConstFetch( class: Name( parts: array( 0: A ) ) name: Identifier( name: B ) ) name: VarLikeIdentifier( name: c ) ) ) 12: Stmt_Expression( expr: Expr_StaticCall( class: Expr_ClassConstFetch( class: Name( parts: array( 0: A ) ) name: Identifier( name: B ) ) name: Identifier( name: c ) args: array( ) ) ) 13: Stmt_Expression( expr: Expr_ArrayDimFetch( var: Scalar_MagicConst_Function( ) dim: Scalar_LNumber( value: 0 ) ) ) 14: Stmt_Expression( expr: Expr_PropertyFetch( var: Scalar_MagicConst_Function( ) name: Identifier( name: length ) ) ) 15: Stmt_Expression( expr: Expr_MethodCall( var: Expr_ConstFetch( name: Name( parts: array( 0: __FUNCIONT__ ) ) ) name: Identifier( name: length ) args: array( ) ) ) )