Динамический доступ к свойствам объекта массива типов - PullRequest
0 голосов
/ 26 января 2011

Я создаю класс Language для интернационализации, и я хотел бы получить динамический доступ к свойствам (с указанием имени строки), но я не знаю, как это сделать при работе с массивами (это только пример):

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 голосов
/ 26 января 2011

Вы можете попробовать использовать флаг разделителя, чтобы можно было проанализировать путь массива. Единственная проблема в том, что вы смешиваете свои свойства и массивы, чтобы это могло усложнить ситуацию.

Вы бы назвали свою функцию так:

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

И ваша функция проанализирует путь и вернет правильное значение. Взгляните на вспомогательный массив в Kohana 3.0. Он имеет именно ту функцию, которую вы хотите. http://kohanaframework.org/guide/api/Arr#path

...