(PHP 5 >= 5.2.0, PHP 7)
DOMDocument::registerNodeClass — Temel düğüm türünü oluşturmakta kullanılacak türetilmiş sınıfı belirtmek için kullanılır
$temelSınıf
, string $türetilenSınıf
) : boolSonradan PHP DOM eklentisi tarafından kullanılmak üzere hazırladığınız kendi DOM sınıfınızı tanıtmanızı sağlar.
Bu yöntem DOM standardının bir parçası değildir.
temelSınıf
Kendi sınıfınızı türetirken kullandığınız temel sınıfın ismi. Bu sınıfların listesi için bakınız: DOM.
türetilenSınıf
Türettiğiniz sınıfın ismi. NULL
belirtilirse,
temelSınıf
'tan evvelce türetilen sınıf silinir.
Başarı durumunda TRUE
, başarısızlık durumunda FALSE
döner.
Sürüm: | Açıklama |
---|---|
PHP 5.2.2 |
5.2.2 öncesinde, temelSınıf 'tan evvelce
türetilmiş bir sınıf varsa yenisinin kaydı yapılmadan önce eskisinin
kaydı silinmek zorundaydı.
|
Örnek 1 - Kolaylık olsun diye DOMElement sınıfına yeni bir yöntem eklemek
<?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');
// Artık bir elemanı diğerine eklemek için bir yöntem yetecek!
$root = $doc->setRoot('root');
$child = $root->appendElement('child');
$child->setAttribute('foo', 'bar');
echo $doc->saveXML();
?>
Yukarıdaki örneğin çıktısı:
<?xml version="1.0"?> <root><child foo="bar"/></root>
Örnek 2 - Elemanların özel bir sınıf olarak döndürülmesi
<?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));
// __toString yönteminden yararlanalım
echo $element;
?>
Yukarıdaki örneğin çıktısı:
string(9) "myElement" text in child
Örnek 3 - Asıl belgeyi döndürmek
DOMDocument sınıfına özgü olarak, sınıf örneklenirken sınıfın ownerDocument özelliği örneklenen sınıfı gösterecektir. Yani, DOMDocument sınıfı için DOMDocument::registerNodeClass() yönteminin kullanımına aslında gerek yoktur.
<?php
class myDOMDocument extends DOMDocument {
}
class myOtherDOMDocument extends DOMDocument {
}
// myDOMDocument nesnesini XML belge olarak oluşturalım
$doc = new myDOMDocument;
$doc->loadXML("<root><element><child>text in child</child></element></root>");
$child = $doc->getElementsByTagName("child")->item(0);
// Düğümün sahibi myDOMDocument nesnesidir
var_dump(get_class($child->ownerDocument));
// myDOMDocument nesnesinden bir düğüm alalım
$newdoc = new myOtherDOMDocument;
$child = $newdoc->importNode($child);
// Düğümün sahibi artık myOtherDOMDocument nesnesi oldu
var_dump(get_class($child->ownerDocument));
?>
Yukarıdaki örneğin çıktısı:
string(13) "myDOMDocument" string(18) "myOtherDOMDocument"