2011-01-25 4 views
0

국제화를위한 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를 통해 개인() 함수를 동적으로 .. 배열에 액세스하기위한 방법이 필요합니다.
감사합니다.

답변

0

배열 경로를 구문 분석 할 수 있도록 구분 기호 플래그를 사용해 볼 수 있습니다. 유일한 문제는 속성과 배열을 혼합하여 사물을 복잡하게 만드는 것입니다.

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

을 그리고 당신의 기능은 경로를 분석하고 올바른 값을 반환합니다 :

이 같은 함수를 호출 할 것이다. Kohana 3.0에서 배열 도우미를 살펴보십시오. 그것은 당신이 원하는 정확한 기능을 가지고 있습니다. http://kohanaframework.org/guide/api/Arr#path

+0

고맙습니다! 이 도우미는 배열 속성에 동적으로 액세스하는 문제를 해결했습니다. –

관련 문제