It may have a better solution, but you may need to clone first object
class DOMExtendedElement extends DOMElement { private $itsVerySpecialProperty; public function setVerySpecialProperty($property) {$this->itsVerySpecialProperty = $property;} public function getVerySpecialProperty(){ return isset($this->itsVerySpecialProperty) ?: ''; } } // First document $firstDocument = new DOMDocument(); $firstDocument->registerNodeClass("DOMElement", "DOMExtendedElement"); $elm = $firstDocument->createElement("elm"); $elm->setVerySpecialProperty("Hello World!"); var_dump($elm); $elm2 = clone $elm; // Third document $thirdDocument = new DOMDocument(); $thirdDocument->registerNodeClass("DOMElement", "DOMExtendedElement"); $thirdDocument->importNode($elm2); var_dump($elm2);
Result:
object(DOMExtendedElement)#2 (1) { ["itsVerySpecialProperty:private"]=> string(12) "Hello World!" } object(DOMExtendedElement)#3 (1) { ["itsVerySpecialProperty:private"]=> string(12) "Hello World!" }
Demo here
source share