(PHP 5 >= 5.2.0, PHP 7)
DOMDocument::registerNodeClass — Регистрация расширенного класса, используемого для создания типа базового узла
$baseclass
, string $extendedclass
) : boolЭтот метод позволяет зарегистрировать свой собственный расширенный класс DOM, который будет использоваться впоследствии расширением PHP DOM.
Этот метод не является частью стандарта DOM.
baseclass
Класс DOM, который вы хотите расширить. Список таких классов можно увидеть во введении.
extendedclass
Имя расширенного класса. Если передать NULL
, будут удалены все
ранее зарегистрированные классы, расширяющие базовый класс
baseclass
.
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Версия | Описание |
---|---|
5.2.2 |
В версиях до 5.2.2 ранее зарегистрированный расширенный класс
extendedclass должен быть исключен из регистрации,
прежде чем регистрировать новый класс, расширяющий тот же базовый класс
baseclass .
|
Пример #1 Добавление нового метода в класс DOMElement для упрощения кода
<?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');
// С этих пор добавление одного элемента к другому
// требует всего одного вызова метода!
$root = $doc->setRoot('root');
$child = $root->appendElement('child');
$child->setAttribute('foo', 'bar');
echo $doc->saveXML();
?>
Результат выполнения данного примера:
<?xml version="1.0"?> <root><child foo="bar"/></root>
Пример #2 Получение элементов в виде пользовательского класса
<?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 методом..
echo $element;
?>
Результат выполнения данного примера:
string(9) "myElement" text in child
Пример #3 Получение имени документа владельца
Когда создается экземпляр расширенного класса DOMDocument, свойство ownerDocument будет ссылаться на создаваемый объект. Это значит, что нет необходимости (а фактически это невозможно) использовать DOMDocument::registerNodeClass() применительно к DOMDocument.
<?php
class myDOMDocument extends DOMDocument {
}
class myOtherDOMDocument extends DOMDocument {
}
// Создаем myDOMDocument с некоторым XML-содержимым
$doc = new myDOMDocument;
$doc->loadXML("<root><element><child>text in child</child></element></root>");
$child = $doc->getElementsByTagName("child")->item(0);
// Текущий владелец узла - myDOMDocument
var_dump(get_class($child->ownerDocument));
// Импортируем узел из myDOMDocument
$newdoc = new myOtherDOMDocument;
$child = $newdoc->importNode($child);
// Новый владелец узла изменился на myOtherDOMDocument
var_dump(get_class($child->ownerDocument));
?>
Результат выполнения данного примера:
string(13) "myDOMDocument" string(18) "myOtherDOMDocument"