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

时间:2018-06-21 18:41:29

标签: php composer-php

在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文档或google中找不到此内容...

列出已安装的库(“ composer show”)很容易,但这并未显示在PHP中自动加载的库。我问的原因是我刚刚使用composer require [library name]安装了一个新库,但是在PHP中找不到该库的类。我正在尝试调试此问题,这将有助于确保autoload.php实际上正在加载该库。

即使启用将自动加载器活动转储到日志文件的“调试器”选项也将有所帮助。

更新:查看“单元测试”代码时,我必须看到一个

use When\When;

在实例化When对象之前。

1 个答案:

答案 0 :(得分:2)

PHP本身没有库或包的概念,只有它定义的函数,类等。

反过来,

Composer并不知道代码的使用方式。它可以根据安装的软件包的配置,使用the spl_autoload_register function注册一个或多个自动加载器,但也可以include certain files on every page load注册一个自己的自动加载器,或者直接定义类和函数。 >

因此,“自动加载该库”没有概念-可能有Composer构建的组合式PSR-4自动加载器,组合的classmap自动加载器以及一堆自定义自动加载器,这些都不需要来“记住”它们属于哪个软件包。

当您请求类时,PHP运行所有已注册的自动加载器,并且通常都有一个文件来定义类,

所有这些操作均发生在PHP代码中,因此可以使用XDebug之类的调试器来查看实际运行的自动加载器以及每个自动加载器的功能,但是请注意,它们可能是难以理解的机器,生成的代码。

未自动加载的类提示以下三种情况之一:

  • Composer尚未生成正确的自动加载器代码。您可以尝试运行composer dump-autoload
  • 该软件包的composer.json中包含错误的自动加载信息。除非没有其他人使用Composer安装它,否则这不太可能。
  • 您在引用类的方式上犯了一个错误,例如缺少名称空间或在use语句中迷惑了它。