2011-01-25 123 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