DOMImplementation sınıfı

(PHP 5, PHP 7, PHP 8)

Giriş

İşlemleri belli bir belge nesne modeli örneğinden bağımsız olarak gerçekleştirmek için bazı yöntemler sunan bir sınıf.

Sınıf Sözdizimi

class DOMImplementation {
/* Yöntemler */
public createDocument(?string $isimalanı = null, string $önekliAd = "", ?DOMDocumentType $belgeTürü = null): DOMDocument
public createDocumentType(string $belgeAdı, string $publicId = "", string $systemId = ""): DOMDocumentType|false
public hasFeature(string $özellik, string $sürüm): bool
}

İçindekiler

add a note

User Contributed Notes 1 note

up
5
LANGE.LUDO
10 years ago
Ok got it working like a charm using "proxy pattern" with traits. The idea being declaring the common methods inside a "trait" in order for extended and registered Node Classes to have access even if not derived / child of the extended DOMNode…Here a small snippet :<?php    namespace my;    trait tNode    {    // We need the magic method __get in order to add properties such as DOMNode->parentElement        public function __get($name)        {    if(property_exists($this, $name)){return $this->$name;}            if(method_exists($this, $name)){return $this->$name();}            throw new \ErrorException('my\\Node property \''.(string) $name.'\' not found…', 42, E_USER_WARNING);        }        // parentElement property definition        private function parentElement()        {    if($this->parentNode === null){return null;}            if($this->parentNode->nodeType === XML_ELEMENT_NODE){return $this->parentNode;}            return $this->parentNode->parentElement();        }        // JavaScript equivalent        public function isEqualNode(\DOMNode $node){return $this->isSameNode($node);}        public function compareDocumentPosition(\DOMNode $otherNode)        {    if($this->ownerDocument !== $otherNode->ownerDocument){return DOCUMENT_POSITION_DISCONNECTED;}            $c = strcmp($this->getNodePath(), $otherNode->getNodePath());            if($c === 0){return 0;}            else if($c < 0){return DOCUMENT_POSITION_FOLLOWING | ($c < -1 ? DOCUMENT_POSITION_CONTAINED_BY : 0);}            return DOCUMENT_POSITION_PRECEDING | ($c > 1 ? DOCUMENT_POSITION_CONTAINS : 0);        }        public function contains(\DOMNode $otherNode){return ($this->compareDocumentPosition($otherNode) >= DOCUMENT_POSITION_CONTAINED_BY);}    }    class Document extends \DomDocument    {    public function __construct($version=null, $encoding=null)        {    parent::__construct($version, $encoding);            $this->registerNodeClass('DOMNode', 'my\Node');            $this->registerNodeClass('DOMElement', 'my\Element');            $this->registerNodeClass('DOMDocument', 'my\Document');            /* [...] */        }    }    class Element extends \DOMElement    {    use tNode;        /* [...] */    }    class Node extends \DOMNode    {    use tNode;        /* [...] */    }?>
To Top