0

我有一个子类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不涉及写入文件、键值存储等的子类基本上拥有全局状态的技巧?

4

1 回答 1

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() 等方法将不起作用

于 2013-07-12T02:39:04.860 回答