DOMDocument::registerNodeClass
DOMDocument::registerNodeClass
(PHP 5 >= 5.2.0, PHP 7)
DOMDocument::registerNodeClass — Register extended class used to create base node type
Description
public bool DOMDocument::registerNodeClass ( string $baseclass , string $extendedclass )
This method allows you to register your own extended DOM class to be used afterward by the PHP DOM extension.
This method is not part of the DOM standard.
Parameters
-
baseclass
-
The DOM class that you want to extend. You can find a list of these classes in the chapter introduction.
-
extendedclass
-
Your extended class name. If
NULL
is provided, any previously registered class extendingbaseclass
will be removed.
Return Values
Returns TRUE
on success or FALSE
on failure.
Changelog
Version | Description |
---|---|
5.2.2 | Prior to 5.2.2, a previously registered extendedclass had to be unregistered before being able to register a new class extending the same baseclass . |
Examples
Example #1 Adding a new method to DOMElement to ease our code
<?php class myElement extends DOMElement { function appendElement($name) { return $this->appendChild(new myElement($name)); } } class myDocument extends DOMDocument { function setRoot($name) { return $this->appendChild(new myElement($name)); } } $doc = new myDocument(); $doc->registerNodeClass('DOMElement', 'myElement'); // From now on, adding an element to another costs only one method call ! $root = $doc->setRoot('root'); $child = $root->appendElement('child'); $child->setAttribute('foo', 'bar'); echo $doc->saveXML(); ?>
The above example will output:
<?xml version="1.0"?> <root><child foo="bar"/></root>
Example #2 Retrieving elements as custom class
<?php class myElement extends DOMElement { public function __toString() { return $this->nodeValue; } } $doc = new DOMDocument; $doc->loadXML("<root><element><child>text in child</child></element></root>"); $doc->registerNodeClass("DOMElement", "myElement"); $element = $doc->getElementsByTagName("child")->item(0); var_dump(get_class($element)); // And take advantage of the __toString method.. echo $element; ?>
The above example will output:
string(9) "myElement" text in child
Example #3 Retrieving owner document
When instantiating a custom DOMDocument the ownerDocument property will refer to the instantiated class, meaning there is no need (and in fact not possible) to use DOMDocument::registerNodeClass() with DOMDocument
<?php class myDOMDocument extends DOMDocument { } class myOtherDOMDocument extends DOMDocument { } // Create myDOMDocument with some XML $doc = new myDOMDocument; $doc->loadXML("<root><element><child>text in child</child></element></root>"); $child = $doc->getElementsByTagName("child")->item(0); // The current owner of the node is myDOMDocument var_dump(get_class($child->ownerDocument)); // Import a node from myDOMDocument $newdoc = new myOtherDOMDocument; $child = $newdoc->importNode($child); // The new owner of the node has changed to myOtherDOMDocument var_dump(get_class($child->ownerDocument)); ?>
The above example will output:
string(13) "myDOMDocument" string(18) "myOtherDOMDocument"
© 1997–2017 The PHP Documentation Group
Licensed under the Creative Commons Attribution License v3.0 or later.
https://secure.php.net/manual/en/domdocument.registernodeclass.php