DOMDocument::registerNodeClass
(PHP 5 >= 5.2.0)
DOMDocument::registerNodeClass — Registra una clase extendida usada para crear tipos de nodos base
Descripción
$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.
Parámetros
-
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 extiendabaseclassserá eliminada.
Valores devueltos
Devuelve TRUE en caso de éxito o FALSE en caso de error.
Historial de cambios
| 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.
|
Ejemplos
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"