Skip to content

Commit 0b06250

Browse files
author
Christian Schneider
committed
Fix doc comments for properties with property hooks and add tests
1 parent 10dd8b5 commit 0b06250

2 files changed

Lines changed: 62 additions & 5 deletions

File tree

Zend/zend_language_parser.y

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -817,13 +817,13 @@ optional_cpp_modifiers:
817817

818818
parameter:
819819
optional_cpp_modifiers optional_type_without_static
820-
is_reference is_variadic T_VARIABLE optional_property_hook_list backup_doc_comment
820+
is_reference is_variadic T_VARIABLE backup_doc_comment optional_property_hook_list backup_doc_comment
821821
{ $$ = zend_ast_create_ex(ZEND_AST_PARAM, $1 | $3 | $4, $2, $5, NULL,
822-
NULL, $7 ? zend_ast_create_zval_from_str($7) : NULL, $6); }
822+
NULL, $8 ? zend_ast_create_zval_from_str($8) : ($6 ? zend_ast_create_zval_from_str($6) : NULL), $7); }
823823
| optional_cpp_modifiers optional_type_without_static
824-
is_reference is_variadic T_VARIABLE '=' expr optional_property_hook_list backup_doc_comment
825-
{ $$ = zend_ast_create_ex(ZEND_AST_PARAM, $1 | $3 | $4, $2, $5, $7,
826-
NULL, $9 ? zend_ast_create_zval_from_str($9) : NULL, $8); }
824+
is_reference is_variadic T_VARIABLE backup_doc_comment '=' expr optional_property_hook_list backup_doc_comment
825+
{ $$ = zend_ast_create_ex(ZEND_AST_PARAM, $1 | $3 | $4, $2, $5, $8,
826+
NULL, $10 ? zend_ast_create_zval_from_str($10) : ($6 ? zend_ast_create_zval_from_str($6) : NULL), $9); }
827827
;
828828

829829
optional_type_without_static:
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
--TEST--
2+
Test ReflectionParameter::getDocComment() usage for property with hook.
3+
--INI--
4+
opcache.save_comments=1
5+
--FILE--
6+
<?php
7+
8+
class A
9+
{
10+
public function __construct(
11+
/** $foo */
12+
public string $foo {
13+
/** getter */
14+
get { return "foo"; }
15+
/** setter */
16+
set(string $value /** $value */) {}
17+
}
18+
) {}
19+
}
20+
21+
$rc = new ReflectionClass('A');
22+
$rp = $rc->getProperty('foo');
23+
echo "\n---> Doc comment for A::property $" . $rp->getName() . ":\n";
24+
var_dump($rp->getDocComment());
25+
26+
$rh = $rp->getHook(PropertyHookType::Get);
27+
echo "\n---> Doc comment for A::property " . $rh->getName() . ":\n";
28+
var_dump($rh->getDocComment());
29+
30+
$rh = $rp->getHook(PropertyHookType::Set);
31+
echo "\n---> Doc comment for A::property " . $rh->getName() . ":\n";
32+
var_dump($rh->getDocComment());
33+
34+
$rp = $rh->getParameters()[0];
35+
echo "\n---> Doc comment for A::property \$foo::set parameter $" . $rp->getName() . ":\n";
36+
var_dump($rp->getDocComment());
37+
38+
$rp = $rc->getConstructor()->getParameters()[0];
39+
echo "\n---> Doc comment for A::constructor parameter $" . $rp->getName() . ":\n";
40+
var_dump($rp->getDocComment());
41+
42+
?>
43+
--EXPECTF--
44+
---> Doc comment for A::property $foo:
45+
string(%d) "/** $foo */"
46+
47+
---> Doc comment for A::property $foo::get:
48+
string(%d) "/** getter */"
49+
50+
---> Doc comment for A::property $foo::set:
51+
string(%d) "/** setter */"
52+
53+
---> Doc comment for A::property $foo::set parameter $value:
54+
string(%d) "/** $value */"
55+
56+
---> Doc comment for A::constructor parameter $foo:
57+
string(%d) "/** $foo */"

0 commit comments

Comments
 (0)