PHP.mk документација

DOMDocument::registerNodeClass

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

domdocument.registernodeclass.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека domdocument.registernodeclass.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
DOMDocument::registerNodeClass

Референца за `domdocument.registernodeclass.php` со подобрена типографија и навигација.

domdocument.registernodeclass.php

DOMDocument::registerNodeClass

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

DOMDocument::registerNodeClass(PHP 5 >= 5.2.0, PHP 7, PHP 8)

= NULL

public DOMDocument::registerNodeClass(string $baseClass, ?string $extendedClass): true

Регистрирајте проширена класа што се користи за креирање на основниот тип на јазол

Овој метод ви овозможува да ја регистрирате вашата сопствена проширена DOM класа за да се користи потоа од страна на PHP DOM екстензијата.

Безбедност: стандардниот сет на знаци

Овој метод не е дел од DOM стандардот.

Параметри

baseClass

Конструкторот на објектите од регистрираните класи на јазли не се повикува. DOM класата што сакате да ја проширите. Можете да најдете листа на овие класи во.

extendedClass

вовед во поглавјето null Името на вашата проширена класа. Ако baseClass е обезбедено, секоја претходно регистрирана класа што ја проширува

Вратени вредности

Секогаш враќа true.

Дневник на промени

Верзија = NULL
8.4.0 сега има тип на враќање SplHeap::recoverFromCorruption() true.

Примери

ќе биде отстранета.

<?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');

// From now on, adding an element to another costs only one method call !
$root = $doc->setRoot('root');
$child = $root->appendElement('child');
$child->setAttribute('foo', 'bar');

echo
$doc->saveXML();

?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

<?xml version="1.0"?>
<root><child foo="bar"/></root>

Пример #1 Додавање нов метод на DOMElement за олеснување на нашиот код

<?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));

// And take advantage of the __toString method..
echo $element;
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

string(9) "myElement"
text in child

Пример #2 Враќање елементи како прилагодена класа

Пример #3 Враќање на сопственичкиот документ DOMDocument the ownerDocument При инстанцирање на прилагодено DOMDocument својството ќе се однесува на инстанцираната класа. Сепак, ако сите референци до таа класа се отстранат, таа ќе биде уништена и наместо тоа ќе се создадат нови сега има тип на враќање with DOMDocument

<?php
class MyDOMDocument extends DOMDocument {
}

class
MyOtherDOMDocument extends DOMDocument {
}

// Create MyDOMDocument with some XML
$doc = new MyDOMDocument;
$doc->loadXML("<root><element><child>text in child</child></element></root>");

$child = $doc->getElementsByTagName("child")->item(0);

// The current owner of the node is MyDOMDocument
var_dump(get_class($child->ownerDocument));
// MyDOMDocument is destroyed
unset($doc);
// And new DOMDocument instance is created
var_dump(get_class($child->ownerDocument));

// Import a node from MyDOMDocument
$newdoc = new MyOtherDOMDocument;
$child = $newdoc->importNode($child);

// Register custom DOMDocument
$newdoc->registerNodeClass("DOMDocument", "MyOtherDOMDocument");

var_dump(get_class($child->ownerDocument));
unset(
$doc);
// New MyOtherDOMDocument is created
var_dump(get_class($child->ownerDocument));
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

string(13) "MyDOMDocument"
string(11) "DOMDocument"
string(18) "MyOtherDOMDocument"
string(18) "MyOtherDOMDocument"

Затоа може да користите

Безбедност: стандардниот сет на знаци

Пример #4 Прилагодените објекти се привремени

<?php
class MyDOMElement extends DOMElement
{
public
$myProp = 'default value';
}

$doc = new DOMDocument();
$doc->registerNodeClass('DOMElement', 'MyDOMElement');

$node = $doc->createElement('a');
$node->myProp = 'modified value';
$doc->appendChild($node);

echo
$doc->childNodes[0]->myProp, PHP_EOL;
unset(
$node);
echo
$doc->childNodes[0]->myProp, PHP_EOL;
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

modified value
default value

Белешки од корисници 2 забелешки

Објектите од регистрираните класи на јазли се привремени, т.е. тие се уништуваат кога веќе не се реферираат од PHP код, и повторно се креираат кога повторно ќе бидат преземени. Тоа подразбира дека прилагодените вредности на својствата ќе бидат изгубени по повторното креирање.
пред 16 години
Creating innerHTML and outerHTML

<?php

class DOMHTMLElement extends DOMElement
{
    function __construct() { parent::__construct();} 
    
    public function innerHTML()
    {
        $doc = new DOMDocument();
      foreach ($this->childNodes as $child){
          $doc->appendChild($doc->importNode($child, true));
        }
        $content = $doc->saveHTML();
        return $content;
    }
    
    public function outerHTML()
    {
        $doc = new DOMDocument();
        $doc->appendChild($doc->importNode($this, true));
        $content = $doc->saveHTML();
        return $content;
    }
}

$dom = DOMDocument::loadHTMLFile($file);
$dom->registerNodeClass('DOMElement','DOMHTMLElement');
            
if($dom)
{
    $xpath = new DOMXpath($dom);    
    $regions = $xpath->query("//*[contains(@class, 'editable')]");    
    $content = '';
    
    foreach($regions as $region){
        $content .= $region->outerHTML();
    }    
    
    return $content;
    
}else{                
    throw new Exception('Cannot parse HTML.  Please verify the syntax is correct.');
}
?>
crh3675 at gmail dot com
пред 16 години
Note than save and saveXML are not affected by __toString().
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.