|
|
|
@ -3104,6 +3104,7 @@ ZEND_METHOD(reflection_class, getMethods) |
|
|
|
ZEND_METHOD(reflection_class, hasProperty) |
|
|
|
{ |
|
|
|
reflection_object *intern; |
|
|
|
zend_property_info *property_info; |
|
|
|
zend_class_entry *ce; |
|
|
|
char *name; |
|
|
|
int name_len; |
|
|
|
@ -3115,11 +3116,13 @@ ZEND_METHOD(reflection_class, hasProperty) |
|
|
|
} |
|
|
|
|
|
|
|
GET_REFLECTION_OBJECT_PTR(ce); |
|
|
|
if (zend_hash_exists(&ce->properties_info, name, name_len + 1)) { |
|
|
|
if (zend_hash_find(&ce->properties_info, name, name_len+1, (void **) &property_info) == SUCCESS) { |
|
|
|
if (property_info->flags & ZEND_ACC_SHADOW) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
RETURN_TRUE; |
|
|
|
} else { |
|
|
|
if (intern->obj && Z_OBJ_HANDLER_P(intern->obj, has_property)) |
|
|
|
{ |
|
|
|
if (intern->obj && Z_OBJ_HANDLER_P(intern->obj, has_property)) { |
|
|
|
MAKE_STD_ZVAL(property); |
|
|
|
ZVAL_STRINGL(property, name, name_len, 1); |
|
|
|
if (Z_OBJ_HANDLER_P(intern->obj, has_property)(intern->obj, property, 2 TSRMLS_CC)) { |
|
|
|
|