Skip to content

Commit

Permalink
Fix ReflectionProperty::__toString() of properties containing enums
Browse files Browse the repository at this point in the history
  • Loading branch information
iluuu1994 committed Apr 28, 2022
1 parent 21d551a commit 1944c14
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 0 deletions.
2 changes: 2 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,8 @@ PHP NEWS
- Reflection:
. Fixed bug GH-8080 (ReflectionClass::getConstants() depends on def. order).
(cmb)
. Fixed bug GH-8444 (Fix ReflectionProperty::__toString() of properties
containing instantiated enums). (ilutov)

- Zlib:
. Fixed bug GH-7953 (ob_clean() only does not set Content-Encoding). (cmb)
Expand Down
7 changes: 7 additions & 0 deletions ext/reflection/php_reflection.c
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,13 @@ static int format_default_value(smart_str *str, zval *value) {
format_default_value(str, zv);
} ZEND_HASH_FOREACH_END();
smart_str_appendc(str, ']');
} else if (Z_TYPE_P(value) == IS_OBJECT) {
zend_object *obj = Z_OBJ_P(value);
zend_class_entry *class = obj->ce;
ZEND_ASSERT(class->ce_flags & ZEND_ACC_ENUM);
smart_str_append(str, class->name);
smart_str_appends(str, "::");
smart_str_append(str, Z_STR_P(zend_enum_fetch_case_name(obj)));
} else {
ZEND_ASSERT(Z_TYPE_P(value) == IS_CONSTANT_AST);
zend_string *ast_str = zend_ast_export("", Z_ASTVAL_P(value), "");
Expand Down
31 changes: 31 additions & 0 deletions ext/reflection/tests/gh8444.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
--TEST--
GH-8444 (Fix ReflectionProperty::__toString() of properties containing instantiated enums)
--FILE--
<?php

enum Foo
{
case Bar;
}

class Bar
{
public Foo $enum = Foo::Bar;
public $enumInArray = [Foo::Bar];
}

echo new \ReflectionProperty('Bar', 'enum'), "\n";
echo new \ReflectionProperty('Bar', 'enumInArray'), "\n";

echo new \ReflectionProperty(new Bar, 'enum'), "\n";
echo new \ReflectionProperty(new Bar, 'enumInArray'), "\n";

?>
--EXPECT--
Property [ public Foo $enum = Foo::Bar ]

Property [ public $enumInArray = [Foo::Bar] ]

Property [ public Foo $enum = Foo::Bar ]

Property [ public $enumInArray = [Foo::Bar] ]

0 comments on commit 1944c14

Please sign in to comment.