如何过滤整个命名空间层次结构以查看我的包是否已成功自动加载(以及对这些类进行其他处理)
我在SO上寻找过类似的问题,但似乎没有人回答这个具体案例。
例如,我希望在整个框架启动后,在Laravel控制器中获取这个类列表。
我正在寻找我已经在composer.json中自动加载或从包中添加的自定义命名空间。
CompanyNS\SpecificApplicationNS\Shazbat
我如何浏览所有内容以查看Shazbat
下已加载哪些类?
我有什么方法可以用vendor/composer/autoload_psr4.php
做点什么吗?
这些类可以从其他外部包加载。
感谢您的期待。
答案 0 :(得分:3)
因此,要获取在唯一命名空间下声明的所有类,在这种情况下仅使用命名空间名称" foo\bar
"你可以做到以下几点。
# lets assume this is the namespace, we don't know how many classes it has
# inside it, but we want to find them.
namespace foo\bar{
class foo_a{}
class bar_a{}
}
# this is a namespace, we don't want to find these classes inside it.
namespace tar\baz{
class tar_a{}
class baz_a{}
}
namespace main{
# this is the only code you need. wrap it in a function if you want
$namespace = 'foo\bar';
foreach(\get_declared_classes() as $class){
if(strpos($class, $namespace) === 0){
$c = substr($class, strlen($namespace));
echo 'class ' . $c . ' exists in namespace '. $namespace . '<br/>';
}
}
}
class \ foo_a存在于命名空间foo \ bar中 class \ bar_a存在于命名空间foo \ bar
中