首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何确定Composer autoload.php加载了哪些库

如何确定Composer autoload.php加载了哪些库
EN

Stack Overflow用户
提问于 2018-06-22 02:41:29
回答 1查看 2.9K关注 0票数 0

在PHP中,有没有办法获得Composer的/vendor/autoload.php文件加载的所有库的列表?

示例:

代码语言:javascript
复制
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单元测试代码,我发现必须有一个

代码语言:javascript
复制
use When\When;

在实例化When对象之前。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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未生成正确的自动加载器代码。您可能会尝试运行在其composer.json中包含错误自动加载信息的composer dump-autoload
  • The包。除非没有其他人使用Composer进行安装,否则这是不可能的。
  • 您在引用类的方式上犯了错误,例如,缺少命名空间,或者在use语句中键入错误。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50975540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档