Doc #73981 [Com]: __construct not being called on extensions of DOM base classes

From: Date: Wed, 23 Nov 2022 04:55:54 +0000
Subject: Doc #73981 [Com]: __construct not being called on extensions of DOM base classes
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-19483@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73981&edit=1 ID: 73981 Comment by: amin dot jigari5262 at gmail dot com Reported by: work at timothytown dot com Summary: __construct not being called on extensions of DOM base classes Status: Verified Type: Documentation Problem Package: DOM XML related Operating System: windows PHP Version: 7.1.1 Block user comment: N Private report: N New Comment: I tried many times but similar code error jcpenneykiosk.review Previous Comments: ------------------------------------------------------------------------ [2021-07-09 12:45:13] cmb@php.net The problem is: which arguments should be passed to the constructor of the custom class? This can't be determined, because constructors are exempt from signature checks on inheritance, so arbitrary parameters could be expected. Even if it we would enforce that the signature of the custom class would match the one of the parent (what could be confusing and restricting), it may not be possible to implement that. Given that ::registerNodeClass() has the already documented limitation that re-created instances loose their property values, I think it's best to document the quirk that the constructors are not called as well, and to leave it at this. ------------------------------------------------------------------------ [2018-07-27 12:24:00] cmb@php.net Confirmed: <https://3v4l.org/sN59G>. ------------------------------------------------------------------------ [2017-01-23 18:13:03] work at timothytown dot com Description: ------------ When a class is registered to a DOMDocument via the registerNodeClass method, the assigned class is used to instance the return object from the DOMDOcument. However, the construct method of that class is not called. Test script: --------------- class SillyTestClass extends DOMElement{ public $foo=null; public function __construct($name,$value=null,$namespace=null){ echo "calling child construct...."; $this->foo="bar"; parent::__construct($name,$value,$namespace); } public function sayHello(){ echo "Why, hello there!"; } } $doc=new DOMDocument(); $doc->registerNodeClass('DOMElement','SillyTestClass'); $doc->loadHTML("<div><h1>Sample</h1></div>"); //THIS WORKS! CUSTOM CLASS BEING USED $doc->documentElement->firstChild->sayHello(); //THIS IS STILL NULL:( Never set by construct, no message saying construct was called either echo $doc->documentElement->firstChild->foo; Expected result: ---------------- output "calling child construct..." //printed from child _construct output "Why, hello there!" //printed from child method sayHello() output "bar" //the value of child property after being assigned in constructor Actual result: -------------- //only the sayHello() method fires; construct doesn't happen Why, hello there; ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=73981&edit=1

« previous php.doc.bugs (#19483) next »