2010-03-29 84 views
3

如果我在運行時計算名稱,如何通過名稱訪問對象的屬性?php對象:通過計算得到的名稱獲取屬性值

例如,我循環的密鑰,並希望獲得屬性"field_" . $key的每個值。在Python中有getattribute(myobject, attrname)

它的工作原理,當然,eval("$val=$myobject->".$myattr.";"); 但IMO這是醜陋的 - 有沒有更乾淨的方法來做到這一點?

回答

7

永遠記住,PHP的一個非常強大的功能是它的Variable Variables

您可以使用

$attr = 'field' . $key; 
$myobject->$attr; 

或更簡潔,使用curl括號

$myobject->{'field_'.$key}; 
8
$myobject->{'field_'.$key} 
+2

+1 - 你可以用花括號'{}'只要你想PHP表達 – Andy 2010-03-29 09:58:29

+0

的其餘部分之前評估其內容你好,我可以使用這樣的'$ myObject的 - > {'level1- > level2'}'或者'$ myObject - > {level1} - > {level2}'。如何在多個級別上執行此操作,當級別值是動態的時候? – 2013-08-28 06:45:18

1
$val = $myobject->$myattr; 
1

With reflection

$reflectedObject = new ReflectionObject($myobject); 
$reflectedProperty = $reflectedObject->getProperty($attrName); 
$value = $reflectedProperty->getValue($myobject); 

這隻有在訪問屬性是公共的,如果它保護的或私有的異常將occurr。

1

我知道這是一個古老的主題,但爲什麼不只是使用魔術方法?

$myObj->__get($myAttr)