Documentación offline PHP master

DOMDocument::registerNodeClass

master Ver versión oficial en línea Licencia CC-BY-3.0Descargado el 2026-08-02

En esta página

DOMDocument::registerNodeClass

Registra la clase extendida utilizada para crear un tipo de nodo base

Descripción#

public DOMDocument::registerNodeClass(string $baseClass, string $extendedClass): true
```php

Este método permite registrar su propia clase DOM extendida para ser utilizada posteriormente en la extensión DOM de PHP.

Este método no forma parte del estándar DOM.

> [!CAUTION]
> Los constructores de los objetos de las clases de nodos registrados no son llamados.

## Parámetros

`baseClass`  
La clase DOM que se desea extender. Puede encontrarse una lista de estas clases en la [introducción del capítulo](#book.dom).

`extendedClass`  
El nombre de su clase extendida. Si se proporciona el valor `null`, todas las clases registradas previamente que extienden `baseClass` serán eliminadas.

## Valores devueltos

Retorna siempre `true`.

## Historial de cambios

| Versión | Descripción |
|----|----|
| 8.4.0 | DOMDocument::registerNodeClass ahora tiene un tipo de retorno provisional de tipo `true`. |

## Ejemplos

Añadir un nuevo método a DOMElement
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 aquí, la adición de un elemento a otro se realiza en una sola llamada ! $root = $doc->setRoot('root'); $child = $root->appendElement('child'); $child->setAttribute('foo', 'bar'); echo $doc->saveXML(); ?>
El ejemplo anterior mostrará:

Recuperación de elementos en forma de clase personalizada
nodeValue; } } $doc = new DOMDocument; $doc->loadXML("Texto en un hijo"); $doc->registerNodeClass("DOMElement", "myElement"); $element = $doc->getElementsByTagName("child")->item(0); var_dump(get_class($element)); // Y utilizamos las ventajas del método __toString.. echo $element; ?>
El ejemplo anterior mostrará:

string(9) "myElement" Texto en un hijo

Recuperación del propietario del documento

Al instanciar un `DOMDocument` personalizado, la propiedad `ownerDocument` se refiere a la clase instanciada. Sin embargo, si todas las referencias a esta clase son eliminadas, será destruida y una nueva instancia de `DOMDocument` será creada en su lugar. Por esta razón, puede utilizarse el método `DOMDocument::registerNodeClass` con `DOMDocument`
loadXML("texto en un hijo"); $child = $doc->getElementsByTagName("child")->item(0); // El propietario actual del nodo es MyDOMDocument var_dump(get_class($child->ownerDocument)); // MyDOMDocument es destruido unset($doc); // Y una nueva instancia de DOMDocument es creada var_dump(get_class($child->ownerDocument)); // Importación de un nodo desde MyDOMDocument $newdoc = new MyOtherDOMDocument; $child = $newdoc->importNode($child); // Registra un DOMDocument personalizado $newdoc->registerNodeClass("DOMDocument", "MyOtherDOMDocument"); var_dump(get_class($child->ownerDocument)); unset($doc); // Un nuevo MyOtherDOMDocument es creado var_dump(get_class($child->ownerDocument)); ?>
El ejemplo anterior mostrará:

string(13) "MyDOMDocument" string(11) "DOMDocument" string(18) "MyOtherDOMDocument" string(18) "MyOtherDOMDocument"

Los objetos personalizados son efímeros

> [!CAUTION]
> Los objetos de la clase de nodos registrada son efímeros, es decir, son destruidos cuando ya no son referenciados desde el código PHP, y recreados cuando son recuperados nuevamente. Esto implica que los valores de propiedades personalizadas se perderán después de la recreación.
registerNodeClass('DOMElement', 'MyDOMElement'); $node = $doc->createElement('a'); $node->myProp = 'modified value'; $doc->appendChild($node); echo $doc->childNodes[0]->myProp, PHP_EOL; unset($node); echo $doc->childNodes[0]->myProp, PHP_EOL; ?>
El ejemplo anterior mostrará:

modified value default value

```php