动态访问类型数组的对象属性

时间:2011-01-25 21:52:49

标签: php object dynamic properties

我正在构建一个用于国际化的语言类,我想动态访问这些属性(给出字符串名称),但是在处理数组时我不知道该怎么做(这只是一个例子):

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()函数访问公共和私有 谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试使用分隔符标志,以便可以解析数组路径。唯一的问题是你混合了属性和数组,这可能会使事情变得复杂。

您可以像这样调用您的函数:

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

您的函数将解析路径并返回正确的值。看看Kohana 3.0中的数组助手。它具有您想要的确切功能。 http://kohanaframework.org/guide/api/Arr#path