如何将PHP属性添加到SimpleXMLElement?

时间:2013-07-12 02:12:16

标签: php oop simplexml

我有一个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不返回属性的值,而是创建一个新的空子对象并返回它。

任何人都可以想到一种覆盖某些属性的行为的方法吗?或者想想任何一个hack,它允许我为所有这些SimpleXMLElement子类提供基本上全局的状态,不涉及写入文件,键值存储等等。

1 个答案:

答案 0 :(得分:0)

编辑:以下内容并不完全有效,因为现在调用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()等方法将无法正常工作