如何将PHP属性添加到SimpleXMLElement


How to Add a PHP Property to a SimpleXMLElement?

我有一个SimpleXMLElement的子类,我想要它的类属性,它将为创建的子节点的属性定义一些默认值。

为了设置这些值,我尝试用以下方法覆盖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_val不返回属性的值,而是创建一个新的空子对象并返回它。

有人能想到一种方法来覆盖某些属性的行为吗?或者想一想任何一种破解方法,让我对所有这些SimpleXMLElement子类都有一个全局状态,而不涉及写入文件、键值存储等。?

EDIT:下面的内容不能完全起作用,因为现在当调用asXML()时,所有元素都将config属性作为子节点。所以我还在寻求解决方案。

通过在PHP的Reflection API中实验各种类/方法,我终于找到了答案。

您可以将其添加到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()等方法将不起作用