2011-01-25 104 views
0

我正在建立一個國際化的語言類,我想動態地訪問屬性(給出字符串名稱),但我不知道如何處理數組時這只是一個例子):動態訪問類型數組的對象屬性

class Language { 

    public static $languages_cache = array(); 

    public $index_header_title; 

    public $index = array(
     "header" => array(
      "title" => NULL 
     ) 
    ); 
} 

現在我來添加語言是這樣的:

Language::$languages_cache["en"] = new Language(); 
Language::$languages_cache["en"]->index_header_title = "Welcome!"; //setting variable 
Language::$languages_cache["en"]->index["header"]["title"] = "Welcome!"; //setting array 

功能的動態訪問成員:

function _($member, $lang) 
{ 
    if (!property_exists('Language', $member)) 
     return ""; 

    return Language::$languages_cache[$lang]->$member; 
} 

所以,輸出成員:

echo _('index_header_title', "en"); //works 
echo _('index["header"]["title"]', "en"); //does not work 

我需要動態地訪問..陣列公衆,並通過__set私人()函數的方式。
謝謝!

回答

0

您可以嘗試使用分隔符標誌,以便可以解析數組路徑。唯一的問題是你正在混合你的屬性和數組,這可能會使事情變得複雜。

你會打電話給你的功能是這樣的:

echo _('index.header.title', "en"); 

和你的函數將解析路徑,並返回正確的值。看看Kohana 3.0中的數組助手。它具有你想要的確切功能。 http://kohanaframework.org/guide/api/Arr#path

+0

謝謝!該幫手解決了動態訪問數組屬性的問題。 – 2011-01-27 19:12:17