PHP5:获取导入的命名空间列表

时间:2011-08-11 12:02:42

标签: php oop namespaces

是否可以在当前上下文中获取PHP文件中所有导入的类/命名空间的列表?

例如:

namespace A;
use B, C\D;

我想得到这个数组:

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

原因是我正在构建Mapper注册表,并且我希望能够使用当前上下文中的别名类名来查询此映射器,而不是全名。

例如:

$registry->getMapper('D');

而不是:

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

如果可能的话,我不想硬编码这些别名,如果有办法从PHP自动获取它们的话!

4 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

最近在PHP Internals邮件列表中对此进行了讨论。简短的回答(据我所知)是没有的。 http://marc.info/?l=php-internals&m=130815747804590&w=2

答案 2 :(得分:0)

唯一的方法是在主__construct()上读取类dir,以获取名称空间的所有可用php文件。 (PHP Manual: glob() - Answer 101017)。

答案 3 :(得分:0)

这个问题的最佳答案: is it possible to get list of defined namespaces

有一些非常方便的代码可以枚举所有命名空间:

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