Ответ 1
Проверьте этот класс и метод getUseStatements.
Или этот метод и метод getNamespaceAliases.
Можно ли получить список всех импортированных классов/пространств имен в файле PHP в текущем контексте?
Например:
namespace A;
use B, C\D;
Я хотел бы получить этот массив:
array('B', 'C\D');
Причина в том, что я создаю реестр Mapper, и я хотел бы иметь возможность запрашивать этот mapper, используя имя псевдониму в текущем контексте, и полное имя.
Например:
$registry->getMapper('D');
Вместо:
$registry->getMapper('C\D');
И если это возможно, я бы не хотел жестко кодировать эти псевдонимы, если есть способ получить их автоматически с PHP!
Проверьте этот класс и метод getUseStatements.
Или этот метод и метод getNamespaceAliases.
Это обсуждалось недавно в списке рассылки PHP Internals. Короткий ответ (как я понимаю) - нет. http://marc.info/?l=php-internals&m=130815747804590&w=2
Единственный способ сделать это, на вашем основном __construct(), читать классы dir, для всех доступных php файлов для пространств имен. (Руководство PHP: glob() - ответ 101017).
Самый верный ответ на этот вопрос: возможно получить список определенных пространств имен
Имеет очень удобный код, который может перечислять все пространства имен:
$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);