如何告诉命名空间下的类列表

时间:2015-11-04 15:20:17

标签: php laravel composer-php

如何过滤整个命名空间层次结构以查看我的包是否已成功自动加载(以及对这些类进行其他处理)

我在SO上寻找过类似的问题,但似乎没有人回答这个具体案例。

例如,我希望在整个框架启动后,在Laravel控制器中获取这个类列表。

我正在寻找我已经在composer.json中自动加载或从包中添加的自定义命名空间。

CompanyNS\SpecificApplicationNS\Shazbat

我如何浏览所有内容以查看Shazbat下已加载哪些类?

我有什么方法可以用vendor/composer/autoload_psr4.php做点什么吗?

这些类可以从其他外部包加载。

感谢您的期待。

1 个答案:

答案 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