(PHP 5 >= 5.2.0, PHP 7, PHP 8)
DOMDocument::registerNodeClass — Registra la classe estesa utilizzata per creare il tipo di nodo di base
Questo metodo consente di registrare la propria classe DOM estesa da utilizzare in seguito dall'estensione DOM di PHP.
Questo metodo non fa parte dello standard DOM.
baseclass
La classe DOM che si desidera estendere. Si può trovare un elenco di queste classi nell'introduzione al capitolo.
extendedclass
Il nome della propria classe estesa. Se viene fornito null
, qualsiasi classe
registrata in precedenza che estende baseclass
verrà rimossa.
Example #1 Aggiunta di un nuovo metodo a DOMElement per semplificare il codice
<?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');
// D'ora in poi, aggiungere un elemento ad un altro costa solo una chiamata al metodo !
$root = $doc->setRoot('root');
$child = $root->appendElement('child');
$child->setAttribute('foo', 'bar');
echo $doc->saveXML();
?>
Il precedente esempio visualizzerà:
<?xml version="1.0"?> <root><child foo="bar"/></root>
Example #2 Recupero di elementi come classe personalizzata
<?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));
// E approfitta del metodo __toString..
echo $element;
?>
Il precedente esempio visualizzerà:
string(9) "myElement" text in child
Example #3 Recupero del proprietario del documento
Quando si crea un'istanza di un DOMDocument personalizzato, la proprietà ownerDocument farà riferimento alla classe istanziata, il che significa che non è necessario (e in realtà non è possibile) utilizzare DOMDocument::registerNodeClass() con DOMDocument
<?php
class myDOMDocument extends DOMDocument {
}
class myOtherDOMDocument extends DOMDocument {
}
// Crea myDOMDocument con un po' di XML
$doc = new myDOMDocument;
$doc->loadXML("<root><element><child>text in child</child></element></root>");
$child = $doc->getElementsByTagName("child")->item(0);
// L'attuale proprietario del nodo è myDOMDocument
var_dump(get_class($child->ownerDocument));
// Importa un nodo da myDOMDocument
$newdoc = new myOtherDOMDocument;
$child = $newdoc->importNode($child);
// Il nuovo proprietario del nodo è cambiato in myOtherDOMDocument
var_dump(get_class($child->ownerDocument));
?>
Il precedente esempio visualizzerà:
string(13) "myDOMDocument" string(18) "myOtherDOMDocument"