Lors de l'instanciation d'un DOMDocument
personnalisé, la propriété ownerDocument se réfère
à la classe instanciée. Cependant, si toutes les références à cette classe
sont supprimées, elle sera détruite et une nouvelle instance de
DOMDocument sera créée à la place. Pour cette raison,
il est possible d'utiliser la méthode DOMDocument::registerNodeClass()
avec DOMDocument
<?php
class MyDOMDocument extends DOMDocument {
}
class MyOtherDOMDocument extends DOMDocument {
}
// Création d'un document MyDOMDocument avec quelques fragments XML
$doc = new MyDOMDocument;
$doc->loadXML("<root><element><child>texte dans un fils</child></element></root>");
$child = $doc->getElementsByTagName("child")->item(0);
// Le propriétaire courant du nœud est MyDOMDocument
var_dump(get_class($child->ownerDocument));
// MyDOMDocument est détruit
unset($doc);
// Et une nouvelle instance de DOMDocument est créée
var_dump(get_class($child->ownerDocument));
// Importation d'un nœud depuis MyDOMDocument
$newdoc = new MyOtherDOMDocument;
$child = $newdoc->importNode($child);
// Enregistre un DOMDocument personnalisé
$newdoc->registerNodeClass("DOMDocument", "MyOtherDOMDocument");
var_dump(get_class($child->ownerDocument));
unset($doc);
// Un nouveau MyOtherDOMDocument est créé
var_dump(get_class($child->ownerDocument));
?>
L'exemple ci-dessus va afficher :
string(13) "MyDOMDocument"
string(11) "DOMDocument"
string(18) "MyOtherDOMDocument"
string(18) "MyOtherDOMDocument"