2011-11-23 125 views
1

當你不知道它們的名字將如何寫入時,是否可以訪問對象的屬性?訪問對象的屬性,就像對象是數組一樣

我的問題是,當查詢返回Zend_Db_Table_Rowset_Abstract對象時,有一些名稱類似「name_fr」,「name_en」,「name_au」的字段。我想根據應用程序中使用的當前語言訪問它們中的任何一個。爲了達到這個目的我這樣寫代碼:

$result = $myModel->fetchAll($query)->current(); 
$row = $result->toArray(); 
echo 'Your name is '.$row['name_'.$language]; 

這很煩人。是否有可能寫這樣的代碼,例如:

$result = $myModel->fetchAll($query)->current(); 
echo 'Your name is '.$result->name_{$language}; 
+0

你可以在自定義排類中隱藏這個邏輯:http://pastebin.com/ny6JtF5b – nevvermind

回答

2

這應該工作:

$result = $myModel->fetchAll($query)->current(); 
echo 'Your name is '.$result->{'name_'.$language}; 
+0

乾杯Godwin!這是工作!請你告訴我這種行爲在哪裏記錄。我如何搜索它?它有名字嗎?非常感謝! – stefan

+0

公平地確定它通常被稱爲動態屬性,但我找不到任何官方文檔(儘管我確信它是這樣)。 – Godwin

+0

它被稱爲變量變量:http://php.net/manual/en/language.variables.variable.php – singles

0

試試這個:

$result->{"name_$language"} 
1

當您使用Zend_Db_TablefetchAll()->current(),類型的返回對象是Zend_Db_Table_Row,它繼承自Zend_Db_Table_Row_AbstractZend_Db_Table_Row_Abstract implements ArrayAccessmanual)接口,這意味着您可以使用數組鍵表示法引用對象屬性。

所以,語法:

'Your name is '.$row['name_'.$language]; 

應不使用toArray()工作;

+0

謝謝你!這是非常有用的信息。 – stefan