Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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属性添加到SimpleXMLElement?_Php_Oop_Simplexml - Fatal编程技术网

如何将PHP属性添加到SimpleXMLElement?

如何将PHP属性添加到SimpleXMLElement?,php,oop,simplexml,Php,Oop,Simplexml,我有一个simplexmlement的子类,我想将属性类化为一个类,该类将为创建的子节点的属性定义一些默认值 为了设置此值,我尝试使用以下方法覆盖addChild: public function addChild($name, $value = '') { $child = parent::addChild($name, $enc_val); error_log(print_r($this->default_link_type, true)); $child-&g

我有一个
simplexmlement
的子类,我想将属性类化为一个类,该类将为创建的子节点的属性定义一些默认值

为了设置此值,我尝试使用以下方法覆盖
addChild

public function addChild($name, $value = '')
{
    $child = parent::addChild($name, $enc_val);
    error_log(print_r($this->default_link_type, true));
    $child->set_default_val($this->default_val);
    return $child;
}
问题在于表达式:
$this->default\u val
不返回属性值,而是创建一个新的空子对象并返回它。


有人能想出一种方法来覆盖某些属性的behvior吗?或者想想任何一种黑客,它允许我对所有这些
simplexmlement
子类拥有一个基本的全局状态,而不涉及写入文件、键值存储等?

编辑:下面的方法不完全有效,因为现在当调用
asXML()
时,所有元素都将config属性作为子节点。所以我还在寻找解决办法

我最终通过在PHP中试验各种类/方法找到了答案

您可以将其添加到SimpleXMLElement子类以获取当前对象的属性值:

protected function get_property($name)
{
    $rc = new ReflectionClass($this);
    $props = $rc->getDefaultProperties();
    if (!isset($props[$name])) {
        throw new InvalidArgumentException(
            '$name does not hold the value of a valid property!'
        );
    }
    return $props[$name];
}

使用ReflectionClass::getProperty()等方法将不起作用。

您只需在创建时通过SimpleXMLElement添加具有某些默认属性值的子节点即可?看看,它应该像
$child->addAttribute('attribute-name',$this->default\u val)一样简单。关于您所陈述的问题,如果没有看到您的子类定义以及
set\u default\u val
$this->default\u val
是什么,就很难帮助您解决问题。