PHP5: получить список импортированных пространств имен - PullRequest
12 голосов
/ 11 августа 2011

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

Например:

namespace A;
use B, C\D;

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

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

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

Например:

$registry->getMapper('D');

Вместо:

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

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

Ответы [ 4 ]

6 голосов
/ 23 июня 2012
3 голосов
/ 11 августа 2011

Это обсуждалось недавно в списке рассылки PHP Internals.Краткий ответ (насколько я понимаю) - нет.http://marc.info/?l=php-internals&m=130815747804590&w=2

0 голосов
/ 05 августа 2013

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

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

    $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 голосов
/ 11 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...