Hello!

Not sure if this is the most proper place for discussing PHP extensions, so blame me 
if I'm in a totally wrong place here ;-)

I'm sure this is as simple as standing up, but I just didn't stumble to the right 
place in documentation and searching the google didn't highlight anything either :-(

So I have a class creation/registering and rest working allright, with one thing 
missing...

How do I tell PHP (4.3.4) / Zend engine to automatically call parent constructors when 
creating a class that has parents in an extension?

Or if it cannot be done automatically, what would be the way to call the parent 
constructor?

I've got an extension with class chain similar to this PHP script:
class item {var $item_str; function test1(){}};
class stringitem extends item{var $stringitem_str; function test2(){}};

In PHP script with my extension I would create:
$test=new stringitem();

And it will get all the item's methods inherited automatically(test1 here), but the 
item constructor won't get called thus the item_str property will be missing ;-(

Registering the classes in C extension
---Code---
...
        INIT_OVERLOADED_CLASS_ENTRY(ce,"item",  
php_item_class_functions,NULL,NULL,NULL);
        item_class_entry_ptr = zend_register_internal_class_ex(&ce, NULL,NULL 
TSRMLS_CC);

        INIT_OVERLOADED_CLASS_ENTRY(ce,"stringitem", 
php_stringitem_class_functions,NULL,NULL,NULL);
        stringitem_class_entry_ptr = zend_register_internal_class_ex(&ce, 
item_class_entry_ptr,NULL TSRMLS_CC);
...
ZEND_FUNCTION(item)
{        add_property_string(this_ptr, "item_str", "ThisIsItemClass",1);}

ZEND_FUNCTION(stringitem)
{
       //TODO: should I call item ctor manually here, if so, how? Can't it be 
automated?
        add_property_string(this_ptr, "stringitem_str", "ThisIsStringItemClass",1);
}
...
---Code---

I can always isolate the constructors to their own functions and call them manually in 
appropriate places to get properties of the parent class(es) initialized, but it 
sounds like a kludge and I' sure there's an automated way to do this since methods get 
inherited....

Thanks in advance!

Erkka Marjakangas
edeATikiDOTfi

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to