3v4l.org

run code in 200+ php & hhvm versions
Bugs & Features
<?php class MyNode extends DOMNode { public function describe() { echo "I am a " . $this->tagName . " node!"; } } class MyElement extends DOMElement {} class MyDocument extends DOMDocument {} class MyNodeList extends DOMNodeList {} // this class is unused. $dom = new MyDocument(); $dom->registerNodeClass("DOMNode", "MyNode"); $dom->registerNodeClass("DOMElement", "MyElement"); // Can't do this, because DOMNodeList doesn't inherit from DOMNode. // $dom->registerNodeClass("DOMNodeList", "MyNodeList"); $dom->loadHTML("<!doctype html><h1>Hello, World!</h1>"); // The items within the DOMNodeList are MyElement objects... var_dump($dom->documentElement->childNodes->item(0)); // ...but why can't I use a MyNodeList here? var_dump($dom->documentElement->childNodes);
based on 9OiE8
Output for 7.0.20, 7.1.5 - 7.3.0alpha1
object(MyElement)#4 (18) { ["tagName"]=> string(4) "body" ["schemaTypeInfo"]=> NULL ["nodeName"]=> string(4) "body" ["nodeValue"]=> string(13) "Hello, World!" ["nodeType"]=> int(1) ["parentNode"]=> string(22) "(object value omitted)" ["childNodes"]=> string(22) "(object value omitted)" ["firstChild"]=> string(22) "(object value omitted)" ["lastChild"]=> string(22) "(object value omitted)" ["previousSibling"]=> NULL ["nextSibling"]=> NULL ["attributes"]=> string(22) "(object value omitted)" ["ownerDocument"]=> string(22) "(object value omitted)" ["namespaceURI"]=> NULL ["prefix"]=> string(0) "" ["localName"]=> string(4) "body" ["baseURI"]=> NULL ["textContent"]=> string(13) "Hello, World!" } object(DOMNodeList)#3 (1) { ["length"]=> int(1) }
Output for 5.3.22 - 7.0.6, 7.1.0
object(MyElement)#4 (17) { ["tagName"]=> string(4) "body" ["schemaTypeInfo"]=> NULL ["nodeName"]=> string(4) "body" ["nodeValue"]=> string(13) "Hello, World!" ["nodeType"]=> int(1) ["parentNode"]=> string(22) "(object value omitted)" ["childNodes"]=> string(22) "(object value omitted)" ["firstChild"]=> string(22) "(object value omitted)" ["lastChild"]=> string(22) "(object value omitted)" ["previousSibling"]=> NULL ["attributes"]=> string(22) "(object value omitted)" ["ownerDocument"]=> string(22) "(object value omitted)" ["namespaceURI"]=> NULL ["prefix"]=> string(0) "" ["localName"]=> string(4) "body" ["baseURI"]=> NULL ["textContent"]=> string(13) "Hello, World!" } object(DOMNodeList)#3 (1) { ["length"]=> int(1) }