PHP Portal » PHP Handbuch » DOMDocument::registerNodeClass

Werbung

DOMDocument::registerNodeClass


(PHP 5 >= 5.2.0)

DOMDocument::registerNodeClassRegister extended class used to create base node type

Beschreibung

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.

Parameter-Liste

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.

Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.

Changelog

Version Beschreibung
PHP 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 .

Beispiele

PHP Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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();

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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

PHP Code
1
2
3
4
5
6
7
8
9
10
11
12
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;

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(9) "myElement"
text in child

Beispiel #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 Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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));

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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