DOMDocument::registerNodeClass

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

DOMDocument::registerNodeClassTemel düğüm türünü oluşturmakta kullanılacak türetilmiş sınıfı belirtmek için kullanılır

Açıklama

publicDOMDocument::registerNodeClass(string$temelSınıf, ?string$türetilenSınıf): bool

Sonradan 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.

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
To Top