A classe DOMImplementation

(PHP 5, PHP 7, PHP 8)

Introdução

Esta classe fornece vários métodos para realizar operações independentes de qualquer instância específica do modelo de objeto de documento.

Resumo da classe

class DOMImplementation {
/* Métodos */
public createDocument(?string $namespace = null, string $qualifiedName = "", ?DOMDocumentType $doctype = null): DOMDocument
public createDocumentType(string $qualifiedName, string $publicId = "", string $systemId = ""): DOMDocumentType|false
public hasFeature(string $feature, string $version): bool
}

Índice

adicione uma nota

Notas Enviadas por Usuários (em inglês) 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