Re: zend_register_class() overwrites ce->create_object with parent_ce->create_object?
| From: | Etienne Kneuss | Date: | Thu, 02 Sep 2010 17:29:04 +0000 |
| Subject: | Re: zend_register_class() overwrites ce->create_object with parent_ce->create_object? | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-49558@lists.php.net to get a copy of this message | ||
On Sep 02 18:04:12, Michael Wallner wrote:
> If I define a descendant class, I *obviously* know what create_object should
> do, as this should only effect internal classes. So could anybody please
> explain to me why the parent's create_object is enforced?
>
> It causes to write hacks like:
>
> ---8<---
> zend_class_entry *ce;
> zend_object_value (*__create_object)(zend_class_entry *ce TSRMLS_DC);
>
> INIT_CLASS_ENTRY(ce, "classname", php_my_method_entry);
> ce.create_object = php_my_object_new;
> /* hack starts here */
> __create_object = parent_ce->create_object;
> parent_ce->create_object = php_my_object_new;
> php_my_class_entry = zend_register_internal_class_ex(&ce, parent_ce, NULL TSRMLS_CC);
> parent->create_object = __create_object;
> --->8---
Why can't you simply overwrite it afterwards? Just like it's done in
SPL:
http://php-og.mgdm.net/opengrok/xref/PHP_5_3/ext/spl/spl_functions.c#41
Best,
>
> If this limitation is there without a really good reason, I'd like to get rid of it.
>
> Thanks,
> Mike
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
--
Etienne Kneuss