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