summaryrefslogtreecommitdiff
path: root/ext/reflection/php_reflection.c
diff options
context:
space:
mode:
authorFelipe Pena <felipe@php.net>2009-04-27 19:48:45 +0000
committerFelipe Pena <felipe@php.net>2009-04-27 19:48:45 +0000
commit9fa1e2d8a8b465feb2dea78a39f1c9668ce517b7 (patch)
treec6f66f52f25c57f33479b5bb3937374a4f1c906c /ext/reflection/php_reflection.c
parent3d71223080bd4e0d56e077de01a3cbbd11a30db9 (diff)
downloadphp-git-9fa1e2d8a8b465feb2dea78a39f1c9668ce517b7.tar.gz
- MFH: Fixed bug #47254 (Wrong Reflection for extends class)
Diffstat (limited to 'ext/reflection/php_reflection.c')
-rw-r--r--ext/reflection/php_reflection.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 3d68dc0c0e..5e14ec4fbe 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -1238,7 +1238,7 @@ static void reflection_method_factory(zend_class_entry *ce, zend_function *metho
MAKE_STD_ZVAL(name);
MAKE_STD_ZVAL(classname);
ZVAL_STRING(name, method->common.function_name, 1);
- ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
+ ZVAL_STRINGL(classname, method->common.scope->name, method->common.scope->name_length, 1);
reflection_instantiate(reflection_method_ptr, object TSRMLS_CC);
intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC);
intern->ptr = method;
@@ -1281,7 +1281,7 @@ static void reflection_property_factory(zend_class_entry *ce, zend_property_info
MAKE_STD_ZVAL(name);
MAKE_STD_ZVAL(classname);
ZVAL_STRING(name, prop_name, 1);
- ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
+ ZVAL_STRINGL(classname, prop->ce->name, prop->ce->name_length, 1);
reflection_instantiate(reflection_property_ptr, object TSRMLS_CC);
intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC);
@@ -2482,11 +2482,6 @@ ZEND_METHOD(reflection_method, __construct)
zval_dtor(&ztmp);
}
- MAKE_STD_ZVAL(classname);
- ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
-
- zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
-
lcname = zend_str_tolower_dup(name_str, name_len);
if (ce == zend_ce_closure && orig_obj && (name_len == sizeof(ZEND_INVOKE_FUNC_NAME)-1)
@@ -2502,6 +2497,11 @@ ZEND_METHOD(reflection_method, __construct)
}
efree(lcname);
+ MAKE_STD_ZVAL(classname);
+ ZVAL_STRINGL(classname, mptr->common.scope->name, mptr->common.scope->name_length, 1);
+
+ zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
+
MAKE_STD_ZVAL(name);
ZVAL_STRING(name, mptr->common.function_name, 1);
zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL);
@@ -4326,17 +4326,18 @@ ZEND_METHOD(reflection_property, __construct)
}
}
- MAKE_STD_ZVAL(classname);
- ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
- zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
-
+ MAKE_STD_ZVAL(classname);
MAKE_STD_ZVAL(propname);
+
if (dynam_prop == 0) {
zend_unmangle_property_name(property_info->name, property_info->name_length, &class_name, &prop_name);
+ ZVAL_STRINGL(classname, property_info->ce->name, property_info->ce->name_length, 1);
ZVAL_STRING(propname, prop_name, 1);
} else {
+ ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
ZVAL_STRINGL(propname, name_str, name_len, 1);
}
+ zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &propname, sizeof(zval *), NULL);
reference = (property_reference*) emalloc(sizeof(property_reference));