Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP调用未定义的方法DomeElement_Php_Xml_Oop_Appendchild - Fatal编程技术网

PHP调用未定义的方法DomeElement

PHP调用未定义的方法DomeElement,php,xml,oop,appendchild,Php,Xml,Oop,Appendchild,我有一个创建xml文件的wrap类,我不知道如何重写add()方法才能正常工作。变量SHOPITEM应该是父元素,但我不知道如何在add方法中访问它 欢迎任何意见 class Items { const XML_VERSION enter code here= '1.0'; const XML_ENCODING = 'utf-8'; const SHOP = 'SHOP'; private $xml, $xmlElement; public fu

我有一个创建xml文件的wrap类,我不知道如何重写add()方法才能正常工作。变量SHOPITEM应该是父元素,但我不知道如何在add方法中访问它

欢迎任何意见

  class Items {

    const XML_VERSION enter code here= '1.0';
    const XML_ENCODING = 'utf-8';
    const SHOP = 'SHOP';

    private $xml, $xmlElement;

    public function __construct() {
        $this->xml = new DOMDocument(self::XML_VERSION, self::XML_ENCODING);
        //$this->xml->preserveWhiteSpace = false;
        $this->xml->formatOutput = true;
        $this->xmlElement = $this->create(self::SHOP);
    }

    public function create($nodeName, $value = null) {
        return $this->xml->createElement($nodeName, $value);
    }

    public function add($object) {
        return $this->xmlElement->appendChild($object);
    }

    public function write() {
        $this->xml->appendChild($this->xmlElement);
        $this->xml->save("test.xml");
    }

}

$items = new Items();
$SHOPITEM = $items->create('SHOPITEM');
$product1 = $items->create('Product1', 'Some value 1');
$product2 = $items->create('Product2', 'Some value 2');

//this wont work
$SHOPITEM->add($product1);

//this works
$items->add($product1);
$items->add($product2);

//this works
$items->add($SHOPITEM);

$items->write();

您的
$SHOPITEM
$product1
$product2
是新添加的节点(即DomeElement类)的实例,因为它们是该语句的结果

return $this->xml->createElement($nodeName, $value);

所以他们确实有一个方法
add($object)
,你想在他们身上使用。

你能告诉我如何重写我的方法,这样我就可以使用add方法吗?据我所知,你试图实现的逻辑(或者至少看起来是这样)您的
Itmes
类应该表示xml文档,该文档将有一个元素
SHOP
,其中包含一些其他元素。如果是这样,这意味着您拥有根元素为
SHOP
的xmldoc,而不仅仅是其中的普通元素,它们都不是保存其他元素的节点。如果以上所有内容都是您想要的,那么您可以使用
add($object)
方法,并为其提供一些
doElement
作为参数。您可以使用
create
方法来准备这些元素。还有一件事:如果您想通过某个包装器对xml结构进行操作,那么就去实现一个只接受您的抽象的包装器,这样您就不会在添加流程或创建流程或其他方面处理DOMElemets。如果不是这样,则直接使用普通PHP功能进行xml操作。混合使用这两种方法会让人感到困惑,因为其中一部分比另一部分抽象得更高。抱歉,由于时间紧迫,我无法提供一些示例。几个小时后我会处理好的。最终xml的结构应该类似于
。这主要是为了我的教育目的,这门课对我来说是个好主意,但正如你所写的,也许不是。谢谢你的意见。