是否可以在当前上下文中获取PHP文件中所有导入的类/命名空间的列表?
例如:
namespace A;
use B, C\D;
我想得到这个数组:
array('B', 'C\D');
原因是我正在构建Mapper注册表,并且我希望能够使用当前上下文中的别名类名来查询此映射器,而不是全名。
例如:
$registry->getMapper('D');
而不是:
$registry->getMapper('C\D');
如果可能的话,我不想硬编码这些别名,如果有办法从PHP自动获取它们的话!
答案 0 :(得分:6)
检查此类和'getUseStatements'方法。
或者这个类和'getNamespaceAliases'方法。
答案 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);