DOMDocument::registerNodeClass

Register extended class used to create base node type

&reftitle.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.

&reftitle.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 extending `baseclass` will be removed.

&reftitle.returnvalues;

&return.success;

&reftitle.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`.

&reftitle.examples;

### 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();

    ?>

&example.outputs;

    <?xml version="1.0"?>
    <root><child foo="bar"/></root>

### 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;
    ?>

&example.outputs;

    string(9) "myElement"
    text in child

### 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));
    ?>

&example.outputs;

    string(13) "myDOMDocument"
    string(18) "myOtherDOMDocument"