Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:8334 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 23213 invoked by uid 1010); 3 Mar 2004 09:46:33 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 23080 invoked from network); 3 Mar 2004 09:46:32 -0000 Received: from unknown (HELO fep02-app.kolumbus.fi) (193.229.0.44) by pb1.pair.com with SMTP; 3 Mar 2004 09:46:32 -0000 Received: from ipana ([80.186.222.174]) by fep02-app.kolumbus.fi with SMTP id <20040303094631.SNFF1464.fep02-app.kolumbus.fi@ipana>; Wed, 3 Mar 2004 11:46:31 +0200 Message-ID: <001001c40104$7d1cc170$aedeba50@ipana> Reply-To: "Erkka Marjakangas" To: Date: Wed, 3 Mar 2004 11:47:05 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1158 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165 Subject: Getting parent constructor called in a class chain - PHP 4.3.4 C extension From: ede@iki.fi ("Erkka Marjakangas") 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=3Dnew 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 =3D 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 =3D = 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