Class not found 根源是 autoload 映射未生效或路径不匹配:需手动运行 composer dump-autoload -o(或 composer require/install/update),检查 vendor/composer/autoload_psr4.php 是否含目标命名空间,确认 PSR-4 路径、大小写、反斜杠结尾及入口文件首行 require DIR . '/vendor/autoload.php' 全部严格正确。

Class not found 不是包没装上,而是 autoload 映射没生效或路径不匹配。
composer dump-autoload -o 必须手动触发
运行 composer require 或 composer install 后,第三方类库文件虽已落进 vendor/,但 PHP 要靠 vendor/autoload.php 里的映射规则才能定位到类。这个映射不会自动刷新——尤其当你改过 composer.json 的 "autoload" 字段(比如加了 "apputils": "app/utils/"),必须手动跑:
-
composer dump-autoload -o(推荐,生成优化后的 classmap) - 或
composer install/composer update(它们内部会调用 dump-autoload)
漏掉这步,autoload_psr4.php 里就看不到新包的命名空间映射,new MonologLogger() 必然报错。
检查 vendor/composer/autoload_psr4.php 是否含目标包
打开 vendor/composer/autoload_psr4.php,搜索你用的类前缀,比如 Monolog。如果没找到对应条目,说明该包的 autoload 声明没被合并进来。常见原因有:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 包自身
composer.json没写"autoload": {"psr-4": {...}}(可运行composer show monolog/monolog查看 autoload 字段是否为空) - 你本地
composer.json的"repositories"配置异常,导致 Composer 拉到了无 autoload 声明的旧版或 fork 版本 - 包是纯函数库,只用了
"files"类型 autoload,这类需dump-autoload才能生成 include 列表,且不支持命名空间自动发现
PSR-4 路径与命名空间大小写必须严格一致
Linux/macOS 下,src/Foo/Bar.php 对应 MyAppFooBar,若文件实际是 src/foo/bar.php,autoload 就失效。检查点包括:
- 类文件所在目录名和命名空间子段是否逐字母匹配(
Utils≠utils) -
composer.json中"autoload": {"psr-4": {"MyApp\": "src/"}}的结尾斜杠不能少,反斜杠要双写 - 确认类定义里
namespace MyAppFoo;和class Bar拼写与文件名完全一致
哪怕只差一个大写字母,class_exists('MyAppFooBar') 就返回 false。
require 'vendor/autoload.php' 的路径和时机容易出错
入口文件里这一行写得不对,autoload 根本没加载进去:
- 别写
require 'vendor/autoload.php';—— 相对路径在 CLI 和 Web SAPI 下行为不同 - 统一用
require __DIR__ . '/vendor/autoload.php'; - 确保它出现在任何
new或use语句之前,且不在条件分支里(比如没被if (false)包住) - 如果用了 opcache 或 APCu,旧 autoload 映射可能被缓存,重启 PHP-FPM 或执行
opcache_reset()
最简单的验证:在 require 后加一行 var_dump(class_exists('MonologLogger'));,输出 false 就说明 autoload 没真正生效,不是包的问题。

















