我寫了下面的類來使某些DOM操作更容易。我希望Easy_Dom_Element的函數能夠接受一個字符串和一個元素作爲輸入。爲此,我必須訪問DOMDocument的createElement方法。對Easy_Dom :: toElement的調用可以正常工作,但該方法中的$ this指向Easy_Dom_Element,而不是Easy_Dom本身。我嘗試了一個靜態調用createElement,如下所示:Easy_Dom::createElement($element)
但由於某些原因,這是不允許的。從DOMElement引用DOMDocument方法
class Easy_Dom extends DOMDocument{
/*function __construct(){
$this->registerNodeClass('DOMElement', 'Easy_Dom_Element');
}*/
//Gets the first element by tag name
function getElement($tagName){
return $this->getElementsByTagName($tagName)->item(0);
}
//Creates DOMElement from string if needed
function toElement($element){
if(is_string($element))$element = $this->createElement($element);
return $element;
}
}
class Easy_Dom_Element extends DOMElement{
function prependChildEl($element){
$element = Easy_Dom::toElement($element);
$this->insertBefore($element, $this->firstChild);
return $element;
}
function appendChildEl($element){
$element = Easy_Dom::toElement($element);
$this->appendChild($element);
return $element;
}
}
$_testxml = new Easy_Dom('1.0', 'ISO-8859-1');
$_testxml->registerNodeClass('DOMElement', 'Easy_Dom_Element');
//load defaults
$_testxml->load('default.xml');
//test above classes
$test = $_testxml->getElement('general_title');
$test->appendChildEl('test');
echo $test->nodeValue;
echo $_testxml->saveXML();
我使用的版本,28年3月5日。靜態調用給我的錯誤是:致命錯誤:非靜態方法DOMDocument :: createElement()不能靜態調用,假設$ this來自不兼容的上下文中... – NotABlueWhale