(PHP 5 >= 5.2.0)
DOMDocument::registerNodeClass — Registra una clase extendida usada para crear tipos de nodos base
$baseclass
, string $extendedclass
)Este método permite registrar su propia clase DOM extendida para usarla después por la extensión DOM de PHP.
Este método no es parte del estándar DOM.
baseclass
La clase DOM que se quiere extender. Se puede encontrar una lista de estas clases en el capítulo introducción.
extendedclass
El nombre de la clase extendida. Si se proporciona NULL
, cualquier clase
registrada previamente que extienda baseclass
será eliminada.
Devuelve TRUE
en caso de éxito o FALSE
en caso de error.
Versión | Descripción |
---|---|
5.2.2 |
Antes de 5.2.2, una extendedclass previamente registrada
teniá que ser desregistrada antes de poder registrar una nueva clase que extendiese
a la misma baseclass .
|
Ejemplo #1 Añadir un nuevo método a DOMElement para facilitar su código
<?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');
// A partir de ahora, ¡ añadir un elemento a otro sólo cuesta una llamada al método !
$root = $doc->setRoot('root');
$child = $root->appendElement('child');
$child->setAttribute('foo', 'bar');
echo $doc->saveXML();
?>
El resultado del ejemplo sería:
<?xml version="1.0"?> <root><child foo="bar"/></root>
Ejemplo #2 Recuperar elementos como clase personalizada
<?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));
// Y tomar ventaja del método __toString ...
echo $element;
?>
El resultado del ejemplo sería:
string(9) "myElement" text in child
Ejemplo #3 Recuperar un propio documento
Al instanciar un DOMDocument personalizado, la propiedad ownerDocument se referirá a la clase instanciada, lo que significa que no hay necesidad (y de hecho no es posible) de usar DOMDocument::registerNodeClass() con DOMDocument
<?php
class myDOMDocument extends DOMDocument {
}
class myOtherDOMDocument extends DOMDocument {
}
// Crear myDOMDocument con algo de XML
$doc = new myDOMDocument;
$doc->loadXML("<root><element><child>text in child</child></element></root>");
$child = $doc->getElementsByTagName("child")->item(0);
// El actual propietario del nodo es myDOMDocument
var_dump(get_class($child->ownerDocument));
// Importar un nodo desde myDOMDocument
$newdoc = new myOtherDOMDocument;
$child = $newdoc->importNode($child);
// El propietario del nodo ha cambiado a myOtherDOMDocument
var_dump(get_class($child->ownerDocument));
?>
El resultado del ejemplo sería:
string(13) "myDOMDocument" string(18) "myOtherDOMDocument"