2011-08-11 4 views
12

가져온 모든 클래스/네임 스페이스 목록을 PHP 파일에 현재 컨텍스트로 가져올 수 있습니까?PHP5 : 가져온 네임 스페이스 목록 가져 오기

array('B', 'C\D'); 

이유는 내가 매퍼 레지스트리를 짓고 있어요 있다는 것입니다, 나는 수 있도록하고 싶습니다 :

namespace A; 
use B, C\D; 

내가이 배열을 좀하고 싶습니다 : 예를 들어

현재의 컨텍스트에서 별명이 지정된 클래스 이름을 사용하여이 맵퍼를 조회하고 전체 이름은 조회하지 않습니다. 예를 들어

:

$registry->getMapper('D'); 

대신 :

$registry->getMapper('C\D'); 

그리고 가능하면, 내가 PHP에서 자동으로 얻을 수있는 방법이 있다면, 이러한 별칭을 하드 코딩하지 싶습니다!

답변

5
+0

목표를 달성하는 데 합리적인 방법 인 것처럼 보입니다. Doctrine Common과 같이 유지 관리가 잘 된 도서관에서 보입니다. 감사! – Benjamin

3

최근에 PHP Internals 메일 링리스트에서 논의되었습니다. 짧은 대답 (나는 그것을 이해함)은 아니오입니다. http://marc.info/?l=php-internals&m=130815747804590&w=2

+0

가 감사를 I 'use' 값을 얻으려고합니다. 나는이 정보가 파서 (parser)를 위해서만 유용 할 것이라는 것을 이해하지만이 정보가 엔진에 제공 될 수 있기를 희망했다. – Benjamin

0

주 __construct()에서 유일하게 이렇게하는 방법은 네임 스페이스에 사용할 수있는 모든 PHP 파일에 대해 클래스 dir을 읽습니다. (PHP Manual: glob() - Answer 101017).

+0

감사합니다. 사실, 정의 된 네임 스페이스를 얻는 방법을 찾고있는 것이 아니라 'use'문을 얻는 방법을 찾고 있습니다. – Benjamin

+0

그런 다음 사용자를 호출하고 요청을 등록하는 함수를 작성하십시오. –

0

이 질문에 대한 최고 답 : is it possible to get list of defined namespaces

모든 네임 스페이스를 열거 할 수있는 매우 편리한 코드를 가지고 : Ernesta의 대답에 말했듯이,

$namespaces=array(); 
    foreach(get_declared_classes() as $name) { 
     if(preg_match_all("@[^\\\]+(?=\\\)@iU", $name, $matches)) { 
      $matches = $matches[0]; 
      $parent =&$namespaces; 
      while(count($matches)) { 
       $match = array_shift($matches); 
       if(!isset($parent[$match]) && count($matches)) 
        $parent[$match] = array(); 
       $parent =&$parent[$match]; 

      } 
     } 
    } 

    print_r($namespaces); 
+0

이것은 선언 된 모든 클래스에 대한 네임 스페이스 목록을 반환하는 반면, 질문은 * 현재 * 파일에 * 가져온 * 네임 스페이스를 반환하는 방법입니다. 아주 다른! – Benjamin

관련 문제