Подтвердить что ты не робот

PHP5: получить список импортированных пространств имен

Можно ли получить список всех импортированных классов/пространств имен в файле PHP в текущем контексте?

Например:

namespace A;
use B, C\D;

Я хотел бы получить этот массив:

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

Причина в том, что я создаю реестр Mapper, и я хотел бы иметь возможность запрашивать этот mapper, используя имя псевдониму в текущем контексте, и полное имя.

Например:

$registry->getMapper('D');

Вместо:

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

И если это возможно, я бы не хотел жестко кодировать эти псевдонимы, если есть способ получить их автоматически с PHP!

4b9b3361

Ответ 3

Единственный способ сделать это, на вашем основном __construct(), читать классы dir, для всех доступных php файлов для пространств имен. (Руководство PHP: glob() - ответ 101017).

Ответ 4

Самый верный ответ на этот вопрос: возможно получить список определенных пространств имен

Имеет очень удобный код, который может перечислять все пространства имен:

    $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);