class not found 报错主因是自动加载未生效:未引入 vendor/autoload.php、类名/命名空间/路径不匹配、误用 require-dev 依赖或存在不可见字符。

Class not found 报错不是 Composer 本身没装好,而是自动加载机制没生效——绝大多数情况,删掉 vendor/autoload.php 或没正确引入它,或者类名/命名空间/文件路径不匹配。
确认 vendor/autoload.php 是否被正确引入
这是最常被忽略的一环:即使 composer install 成功,若 PHP 脚本里没 require 'vendor/autoload.php';,所有 Composer 安装的包类都不可见。
- 检查入口脚本(如
index.php、test.php)顶部是否有一行require __DIR__ . '/vendor/autoload.php'; - 路径必须准确:
__DIR__是当前文件所在目录,不是项目根目录;如果脚本在子目录,要用相对路径或dirname(__DIR__)回溯 - 不要用
include替代require—— 加载失败时include只发 warning,脚本继续执行,后续才爆Class not found
验证类名、命名空间与文件路径是否严格一致
Composer 默认使用 PSR-4 自动加载,它靠「命名空间前缀 → 目录」映射 + 「类名 → 文件名」转换来定位文件。大小写、下划线、斜杠稍有偏差就失败。
- 类
AppControllersHomeController必须定义在src/Controllers/HomeController.php(假设"App\": "src/"在composer.json的autoload.ps4中) - 文件名必须是
HomeController.php,不能是homecontroller.php或Home_controller.php(Linux/macOS 区分大小写) - 类内部声明必须是
namespace AppControllers;,不能漏Controllers或多写一个反斜杠 - 运行
composer dump-autoload -o强制重生成映射表,避免缓存导致旧路径残留
检查是否误用了 dev-only 依赖
有些包只在 require-dev 中声明(比如测试工具、代码生成器),它们不会被 composer install --no-dev 或生产环境部署安装,但你的代码却直接 new 了它的类。
- 执行
composer show查看已安装包列表,确认报错类所属的包是否在其中 - 如果该包只在
require-dev,而你又需要它在生产环境运行,把它移到require下并运行composer update 包名 - 反之,如果只是本地开发时用(比如
phpunit/phpunit),就别在生产脚本中引用其类,否则部署后必报错
真正麻烦的往往不是 autoload 配置写错,而是 IDE 自动补全帮你写了不存在的类名,或者复制粘贴时带进了不可见 Unicode 字符(比如全角空格、零宽字符),这类问题连 composer dump-autoload -v 都不报错,只能靠逐字符核对命名空间和文件路径。











