diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index d2a29e670d8bf..1b37031d02170 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -959,6 +959,10 @@ attributed_class_statement: return_type backup_fn_flags method_body backup_fn_flags { $$ = zend_ast_create_decl(ZEND_AST_METHOD, $3 | $1 | $12, $2, $5, zend_ast_get_str($4), $7, NULL, $11, $9, NULL); CG(extra_fn_flags) = $10; } + | method_modifiers fn returns_ref identifier backup_doc_comment '(' parameter_list ')' + return_type T_DOUBLE_ARROW backup_fn_flags backup_lex_pos expr backup_fn_flags ';' + { $$ = zend_ast_create_decl(ZEND_AST_METHOD, $3 | $1 | $14, $2, $5, + zend_ast_get_str($4), $7, NULL, zend_ast_create(ZEND_AST_RETURN, $13), $9, NULL); CG(extra_fn_flags) = $11; } | enum_case { $$ = $1; } ; diff --git a/tests/lang/class_arrow_function_member.phpt b/tests/lang/class_arrow_function_member.phpt new file mode 100644 index 0000000000000..cdef8cbcbcb4a --- /dev/null +++ b/tests/lang/class_arrow_function_member.phpt @@ -0,0 +1,25 @@ +--TEST-- +Arrow function as a class member +--FILE-- + 222; + private fn test3() => 333; + static fn test4() => 444; + protected static fn &test5() => 555; +} + +$a = new a(); + +var_dump($a->test()); +var_dump($a->test2()); +var_dump($a::test4()); +?> +--EXPECT-- +int(111) +int(222) +int(444) \ No newline at end of file