如何将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
是什么,就很难帮助您解决问题。