【问题标题】:Accessing object properties of type array dynamically动态访问数组类型的对象属性
【发布时间】:2011-01-25 21:52:48
【问题描述】:

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

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() 函数动态访问数组的方法。
谢谢!

【问题讨论】:

    标签: php object dynamic properties


    【解决方案1】:

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

    你会这样调用你的函数:

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

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

    【讨论】:

    • 谢谢!该助手解决了动态访问数组属性的问题。
    猜你喜欢
    • 2011-08-10
    • 1970-01-01
    • 2019-10-27
    • 2013-07-21
    • 1970-01-01
    • 2011-07-13
    • 2019-04-15
    • 2011-06-15
    • 2019-01-29
    相关资源
    最近更新 更多