如果我在運行時計算名稱,如何通過名稱訪問對象的屬性?php對象:通過計算得到的名稱獲取屬性值
例如,我循環的密鑰,並希望獲得屬性"field_" . $key
的每個值。在Python中有getattribute(myobject, attrname)
。
它的工作原理,當然,eval("$val=$myobject->".$myattr.";");
但IMO這是醜陋的 - 有沒有更乾淨的方法來做到這一點?
如果我在運行時計算名稱,如何通過名稱訪問對象的屬性?php對象:通過計算得到的名稱獲取屬性值
例如,我循環的密鑰,並希望獲得屬性"field_" . $key
的每個值。在Python中有getattribute(myobject, attrname)
。
它的工作原理,當然,eval("$val=$myobject->".$myattr.";");
但IMO這是醜陋的 - 有沒有更乾淨的方法來做到這一點?
永遠記住,PHP的一個非常強大的功能是它的Variable Variables
您可以使用
$attr = 'field' . $key;
$myobject->$attr;
或更簡潔,使用curl括號
$myobject->{'field_'.$key};
$myobject->{'field_'.$key}
$val = $myobject->$myattr;
With reflection:
$reflectedObject = new ReflectionObject($myobject);
$reflectedProperty = $reflectedObject->getProperty($attrName);
$value = $reflectedProperty->getValue($myobject);
這隻有在訪問屬性是公共的,如果它保護的或私有的異常將occurr。
我知道這是一個古老的主題,但爲什麼不只是使用魔術方法?
$myObj->__get($myAttr)
+1 - 你可以用花括號'{}'只要你想PHP表達 – Andy 2010-03-29 09:58:29
的其餘部分之前評估其內容你好,我可以使用這樣的'$ myObject的 - > {'level1- > level2'}'或者'$ myObject - > {level1} - > {level2}'。如何在多個級別上執行此操作,當級別值是動態的時候? – 2013-08-28 06:45:18