2013-07-12 87 views
0

我有一個SimpleXMLElement的子類,我想要一個類屬性,它將爲已創建的子節點的屬性定義一些默認值。如何將PHP屬性添加到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子類的全局狀態。

+0

你想要做的就是在創建時通過SimpleXMLElement添加一些默認屬性值的子節點?看看[SimpleXMLElement :: addAttribute](http://www.php.net/manual/en/simplexmlelement.addattribute.php),它應該像'$ child-> addAttribute('attribute-name' ,$ this-> default_val);'。關於你所說的問題,沒有看到你的子類定義以及'set_default_val'和'$ this-> default_val'是不是很容易幫助你。 –

回答

0

編輯:下面不完全工作,因爲現在當調用asXML()所有元素具有配置屬性作爲子節點。所以我仍然在解決方案之後。

我終於在PHP的Reflection API中通過嘗試各種類/方法找到了答案。

您可以到的SimpleXMLElement sublass添加此爲獲取當前對象的屬性值:

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()將無法​​工作