diff options
author | Zeev Suraski <zeev@php.net> | 2003-02-05 09:41:31 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 2003-02-05 09:41:31 +0000 |
commit | da12870c68d0d3f1a2b061f9fbf07f5fe35da57e (patch) | |
tree | 648ddeb964c6db0a62fe30c6c7be21084c15cd3f /Zend/zend_object_handlers.c | |
parent | 20d886da50ea9d6a4af261fdba37b072970055cb (diff) | |
download | php-git-da12870c68d0d3f1a2b061f9fbf07f5fe35da57e.tar.gz |
Add PPP support for arrays
Diffstat (limited to 'Zend/zend_object_handlers.c')
-rw-r--r-- | Zend/zend_object_handlers.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 06bf1fa0f0..2345ae2808 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -342,6 +342,8 @@ static zval **zend_std_get_property_ptr(zval *object, zval *member TSRMLS_DC) zend_object *zobj; zval tmp_member; zval **retval; + zend_property_info *property_info; + zend_property_info std_property_info; zobj = Z_OBJ_P(object); @@ -352,11 +354,23 @@ static zval **zend_std_get_property_ptr(zval *object, zval *member TSRMLS_DC) member = &tmp_member; } + if (zend_hash_find(&zobj->ce->default_properties_info, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &property_info)==FAILURE) { + std_property_info.flags = ZEND_ACC_PUBLIC; + std_property_info.name = Z_STRVAL_P(member); + std_property_info.name_length = Z_STRLEN_P(member); + std_property_info.h = zend_get_hash_value(std_property_info.name, std_property_info.name_length+1); + property_info = &std_property_info; + } + #if DEBUG_OBJECT_HANDLERS fprintf(stderr, "Ptr object #%d property: %s\n", Z_OBJ_HANDLE_P(object), Z_STRVAL_P(member)); #endif - if (zend_hash_find(zobj->properties, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &retval) == FAILURE) { + if (!zend_verify_property_access(property_info, zobj TSRMLS_CC)) { + zend_error(E_ERROR, "Cannot access %s property %s::$%s", zend_visibility_string(property_info->flags), zobj->ce->name, Z_STRVAL_P(member)); + } + + if (zend_hash_quick_find(zobj->properties, property_info->name, property_info->name_length+1, property_info->h, (void **) &retval) == FAILURE) { zval *new_zval; if (!zobj->ce->__get) { |