我有一个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
子类提供基本上全局的状态,不涉及写入文件,键值存储等等。
答案 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()等方法将无法正常工作。