}
/* {{{ reflection_class_constant_factory */
-static void reflection_class_constant_factory(zend_class_entry *ce, zend_string *name_str, zend_class_constant *constant, zval *object)
+static void reflection_class_constant_factory(zend_string *name_str, zend_class_constant *constant, zval *object)
{
reflection_object *intern;
intern->ignore_visibility = 0;
ZVAL_STR_COPY(reflection_prop_name(object), name_str);
- ZVAL_STR_COPY(reflection_prop_class(object), ce->name);
+ ZVAL_STR_COPY(reflection_prop_class(object), constant->ce->name);
}
/* }}} */
intern->ce = constant->ce;
intern->ignore_visibility = 0;
ZVAL_STR_COPY(reflection_prop_name(object), constname);
- ZVAL_STR_COPY(reflection_prop_class(object), ce->name);
+ ZVAL_STR_COPY(reflection_prop_class(object), constant->ce->name);
}
/* }}} */
array_init(return_value);
ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->constants_table, name, constant) {
zval class_const;
- reflection_class_constant_factory(ce, name, constant, &class_const);
+ reflection_class_constant_factory(name, constant, &class_const);
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &class_const);
} ZEND_HASH_FOREACH_END();
}
if ((constant = zend_hash_find_ptr(&ce->constants_table, name)) == NULL) {
RETURN_FALSE;
}
- reflection_class_constant_factory(ce, name, constant, return_value);
+ reflection_class_constant_factory(name, constant, return_value);
}
/* }}} */
--- /dev/null
+--TEST--
+Bug #77325: ReflectionClassConstant::$class returns wrong class when extending
+--FILE--
+<?php
+
+class Foo {
+ const FOO = 'foo';
+}
+
+class Bar extends Foo {
+}
+
+$barClassReflection = new ReflectionClass(Bar::class);
+$constants = $barClassReflection->getReflectionConstants();
+foreach ($constants as $constant) {
+ var_dump($constant->class);
+ var_dump($constant->getDeclaringClass()->getName());
+}
+
+$constant = new ReflectionClassConstant(Bar::class, 'FOO');
+var_dump($constant->class);
+var_dump($constant->getDeclaringClass()->getName());
+
+?>
+--EXPECT--
+string(3) "Foo"
+string(3) "Foo"
+string(3) "Foo"
+string(3) "Foo"