在PHP中,有没有办法获得Composer的/vendor/autoload.php文件加载的所有库的列表?
示例:
require_once("./composer/vendor/autoload.php");
// In some way, get a list of libraries that were loaded:
$libraries = composer_get_libraries(); // you get the idea
我似乎在作曲家文档或谷歌上找不到这个...
列出已安装的库('composer show')很容易,但这并不能显示哪些库是在PHP中自动加载的。我问这个问题的原因是,我刚刚安装了一个带有composer require库名称的新库,但在PHP中找不到该库的类。我正在尝试调试这个问题,确保autoload.php确实加载了这个库会很有帮助。
即使启用将自动加载器活动转储到日志文件的"debugger“选项也会很有帮助。
更新:查看When单元测试代码,我发现必须有一个
use When\When;
在实例化When对象之前。
发布于 2018-06-22 02:59:06
PHP本身没有库或包的概念,只有它定义的函数、类等。
Composer,反过来,不知道代码是如何被使用的;它可以根据安装的软件包的配置,使用the spl_autoload_register
function注册一个或多个自动加载器,但它也可以include certain files on every page load,它可能注册自己的自动加载器,或者只是直接定义类和函数。
因此,没有“自动加载器加载那个库”的概念--可能有一个由Composer构建的组合的PSR-4自动加载器,加上一个组合的classmap自动加载器,以及一堆自定义的自动加载器,其中任何一个都不需要“记住”它们属于哪个包。
当您请求类时,PHP将运行所有已注册的自动加载器,并且每个自动加载器都有机会定义类,通常是通过包含一个文件来实现的。
所有这些都发生在PHP代码中,因此可以使用诸如XDebug之类的调试器来查看实际运行的自动加载器以及每个自动加载器的功能,但要注意它们可能是难以阅读的机器生成代码。
未自动加载的类表示以下三种情况之一:
composer dump-autoload
use
语句中键入错误。https://stackoverflow.com/questions/50975540
复制相似问题