The DOMImplementation class

Введение

The DOMImplementation interface provides a number of methods for performing operations that are independent of any particular instance of the document object model.

Class synopsis

DOMImplementation
class DOMImplementation {
/* Properties */
/* Methods */
__construct ( void )
DOMDocument createDocument ([ string $namespaceURI [, string $qualifiedName [, DOMDocumentType $doctype ]]] )
DOMDocumentType createDocumentType ([ string $qualifiedName [, string $publicId [, string $systemId ]]] )
bool hasFeature ( string $feature , string $version )
}

Содержание

Коментарии

Автор:
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…'42E_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 < -DOCUMENT_POSITION_CONTAINED_BY 0);}
            return 
DOCUMENT_POSITION_PRECEDING | ($c 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;
       
/* [...] */
   
}

?>
2014-11-07 20:05:51
http://php5.kiev.ua/manual/ru/class.domimplementation.html

    Поддержать сайт на родительском проекте КГБ