Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何告知命名空间下的类列表_Php_Laravel_Composer Php - Fatal编程技术网

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

Php 如何告知命名空间下的类列表,php,laravel,composer-php,Php,Laravel,Composer Php,如何筛选整个命名空间层次结构,以查看包是否已成功自动加载(以及这些类上的附加处理) 我曾在SO上寻找过类似的问题,但似乎没有人能回答这个具体案例 例如,我想在整个框架启动后,在Laravel控制器中获得这个类列表 我正在寻找我已经在composer.json中自动加载或从包中添加到的自定义名称空间 CompanyNS\SpecificApplicationNS\Shazbat 我如何浏览所有内容以查看在Shazbat下加载了哪些类 有没有什么方法可以让我使用供应商/composer/autolo

如何筛选整个命名空间层次结构,以查看包是否已成功自动加载(以及这些类上的附加处理)

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

例如,我想在整个框架启动后,在Laravel控制器中获得这个类列表

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

CompanyNS\SpecificApplicationNS\Shazbat

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

有没有什么方法可以让我使用
供应商/composer/autoload_psr4.php

这些类将从其他外部包加载


非常感谢。

因此,要获得在唯一命名空间下声明的所有类,在本例中仅使用命名空间名称“
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/>'; 
        }
    }
}
#假设这是名称空间,我们不知道它有多少个类
#在里面,但我们想找到他们。
名称空间foo\bar{
类foo_a{}
类bar_a{}
}
#这是一个名称空间,我们不想在其中找到这些类。
名称空间tar\baz{
类taru_a{}
类baz_a{}
}
名称空间主{
#这是您需要的唯一代码。如果需要,请将其包装在函数中
$namespace='foo\bar';
foreach(\get\u声明的\u类()为$class){
if(strpos($class,$namespace)==0){
$c=substr($class,strlen($namespace));
echo“class.$c.”存在于命名空间“.$namespace.”中。
; } } }
输出 类\foo\u a存在于命名空间foo\bar中
类\bar\u a存在于命名空间foo\bar中


var_dump(类_存在('CompanyNS\SpecificApplicationNS\Shazbat')
在此上下文中,
Shazbat
名称空间不是我要测试存在性的类。您需要将类添加到名称空间中,以检查类是否存在。这个问题对于不仅仅是Laravel用户的更广泛的受众来说很有用。删除标题中的“in Laravel”部分和Laravel标签,您感觉如何?(可能替换为[composer]?)将有各种各样的类,它们的名称在运行时不一定是已知的。这就是为什么我想知道“在名称空间下”是什么类的原因——它们定义在哪里并不重要。只要您知道本例中的名称空间
$namespace='foo\bar'
你可以找到它们Thank@samayo你的代码可以工作,但是在Laravel中,它只显示服务提供者,而不是实际的类。你知道为什么会这样吗?类和服务提供程序位于相同的目录中,并且在相同的命名空间下。这不只是显示已经自动加载的类吗?自动加载允许PHP在运行时确定从何处加载类,但在加载之前,我认为它不在
get_declared\u classes
@HowApped中,为什么它应该向您显示服务提供者,而不是在同一目录中找到的实际类?你能用目录更新这个问题吗?这样我们就可以调试这个问题了problem@blockhead如果您看到这个示例,则没有实例化任何类。它只调用声明的类。不折不扣