extended objects with read_property and get_property_ptr_ptr
| From: | Rob Richards | Date: | Tue, 06 Jul 2004 10:15:31 +0000 |
| Subject: | extended objects with read_property and get_property_ptr_ptr | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-10926@lists.php.net to get a copy of this message | ||
I was playing around with Bug #28817 and seem to have run into an issue when overriding the
read_property handler with an extended object (this case a DomDocument object).
In order to support standard properties correctly, such as $obj->myprop['a'] =
'b', the internal object needs to support get_property_ptr_ptr. As the internal object
here overrides the read_property handler, it would also need to override the get_property_ptr_ptr
handler to make that standard property work correctly, which is where I have run into some problems.
At first, I implemented a get_property_ptr_ptr handler, but found that for the base internal class
properties, this method needs to return NULL so that cases like zend_pre_incdec_property would fall
back to the read_property/write_property handling. Next was to return NULL for all properties of the
base internal class and return the result of the standard get_property_ptr_ptr for non base class
properties. This fixed the standard properties, but returning NULL for the internal base properties
breaks calls like:
$document->documentElement->ownerDocument;
because zend_fetch_property_address_inner will not fall back to the read_property handler if NULL is
returned get_property_ptr_ptr.
Rather the error "Cannot access undefined property for object with overloaded property
access" is returned.
Is this is a pitfall of the engine or is there something I am overlooking which would allow this to
work across all cases?
Thanks,
Rob