From: Marcus Boerger Date: Thu, 12 May 2005 21:25:42 +0000 (+0000) Subject: - Make ReflectionObject::hasProperty() recognize dynamically added props X-Git-Tag: php-5.0.1b1~248 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c1e480d46e9a251bfeba5008e8e82de75eb0f72b;p=php - Make ReflectionObject::hasProperty() recognize dynamically added props --- diff --git a/Zend/zend_reflection_api.c b/Zend/zend_reflection_api.c index c77bc69d07..aeee738af8 100644 --- a/Zend/zend_reflection_api.c +++ b/Zend/zend_reflection_api.c @@ -2656,6 +2656,7 @@ ZEND_METHOD(reflection_class, hasProperty) zend_class_entry *ce; char *name; int name_len; + zval *property; METHOD_NOTSTATIC; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { @@ -2666,6 +2667,16 @@ ZEND_METHOD(reflection_class, hasProperty) if (zend_hash_exists(&ce->properties_info, name, name_len + 1)) { RETURN_TRUE; } else { + 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)) { + zval_ptr_dtor(&property); + RETURN_TRUE; + } + zval_ptr_dtor(&property); + } RETURN_FALSE; } } diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index c77bc69d07..aeee738af8 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -2656,6 +2656,7 @@ ZEND_METHOD(reflection_class, hasProperty) zend_class_entry *ce; char *name; int name_len; + zval *property; METHOD_NOTSTATIC; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { @@ -2666,6 +2667,16 @@ ZEND_METHOD(reflection_class, hasProperty) if (zend_hash_exists(&ce->properties_info, name, name_len + 1)) { RETURN_TRUE; } else { + 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)) { + zval_ptr_dtor(&property); + RETURN_TRUE; + } + zval_ptr_dtor(&property); + } RETURN_FALSE; } }