DOMDocument::registerNodeClass
(PHP 5 >= 5.2.0, PHP 7, PHP 8)
DOMDocument::registerNodeClass — Temel düğüm türünü oluşturmakta kullanılacak türetilmiş sınıfı belirtmek için kullanılır
Açıklama
public function DOMDocument::registerNodeClass(
string $temelSınıf,
?string $türetilenSınıf):
bool
Bu yöntem DOM standardının bir parçası değildir.
Dikkat
Kayıtlı düğüm sınıflarının nesne kurucusu çağrılmaz.
Bağımsız Değişkenler
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.
Dönen Değerler
Başarı durumunda true, başarısızlık durumunda false döner.
Örnekler
Ö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. Ancak, bu sınıfa yapılan tüm başvurular
kaldırılırsa, sınıf yok edilir ve yerine yeni bir
DOMDocument sınıfı oluşturulur. Bu sebeple,
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 yok edildi
unset($doc);
// Ve yeni bir DOMDocument örneği oluşturuldu
var_dump(get_class($child->ownerDocument));
// MyDOMDocument nesnesinden bir düğüm alalım
$newdoc = new MyOtherDOMDocument;
$child = $newdoc->importNode($child);
// Özel DOMDocument sınıfını kayda alalım
$newdoc->registerNodeClass("DOMDocument", "MyOtherDOMDocument");
var_dump(get_class($child->ownerDocument));
unset($doc);
// Yeni MyOtherDOMDocument oluşturuldu
var_dump(get_class($child->ownerDocument));
?>
Yukarıdaki örneğin çıktısı:
string(13) "MyDOMDocument"
string(11) "DOMDocument"
string(18) "MyOtherDOMDocument"
string(18) "MyOtherDOMDocument"
Örnek 4 - Ismarlama nesneler geçicidir
Dikkat
Kayıtlı düğüm sınıflarının nesneleri geçicidir, yani artık PHP kodundan
gönderim alınmadığında yok edilirler ve tekrar alındığında yeniden
oluşturulurlar. Bu, ısmarlama özellik değerlerinin yeniden
oluşturulduktan sonra kaybedileceği anlamına gelir.
<?php
class MyDOMElement extends DOMElement
{
public $myProp = 'öntanımlı değer';
}
$doc = new DOMDocument();
$doc->registerNodeClass('DOMElement', 'MyDOMElement');
$node = $doc->createElement('a');
$node->myProp = 'değişen değer';
$doc->appendChild($node);
echo $doc->childNodes[0]->myProp, PHP_EOL;
unset($node);
echo $doc->childNodes[0]->myProp, PHP_EOL;
?>
Yukarıdaki örneğin çıktısı:
değişen değer
öntanımlı değer