Re: zend_register_class() overwrites ce->create_object with parent_ce->create_object?

From: 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

« previous php.internals (#49558) next »