PSR-4 是 PHP 自动加载标准,通过命名空间前缀映射目录实现按需加载;要求命名空间与目录严格一一对应、大小写敏感、路径配置规范,并须执行 composer dump-autoload 生成映射文件才生效。

PSR-4 是 PHP 社区统一的自动加载标准,核心是用命名空间前缀“映射”到磁盘目录,让类名能被准确转成文件路径,从而实现按需自动载入——不手动 require,也不靠猜测。
命名空间和目录必须严格一一对应
比如声明了 namespace AppHttpControllers;,那这个类就只能放在 src/Http/Controllers/ 目录下。PSR-4 不扫描文件,只做字符串替换:去掉 App 前缀后,把剩下的 HttpControllers 中的反斜杠 全部换成正斜杠 /,再拼上配置的根路径,就得到完整文件路径。
-
AppHttpControllersUserController→ 剥离后为HttpControllersUserController - → 替换为
Http/Controllers/UserController - → 加上根目录
src/→ 最终路径是src/Http/Controllers/UserController.php - 大小写、层级、文件名(必须等于类名)全部区分,错一个字符就加载失败
composer.json 配置有硬性格式要求
autoload 必须是 composer.json 的顶层字段,不能嵌套在其他键里;命名空间前缀末尾的双反斜杠 和路径末尾的正斜杠 / 都不可省略:
- ✅ 正确:
"App\": "src/" - ❌ 错误:
"App": "src"(缺反斜杠、缺结尾斜杠) - ❌ 错误:
"app\": "src/"(命名空间小写,但类文件实际是大写开头) - 路径必须是相对项目根目录的,不能写
../src/或绝对路径
配置完不会立刻生效,必须生成映射表
composer.json 改了只是“说了算”,真正起作用的是 vendor/composer/autoload_psr4.php 这个映射文件。它不会自动更新,必须手动运行:
立即学习“PHP免费学习笔记(深入)”;
-
composer dump-autoload—— 开发时常用,生成基础映射 -
composer dump-autoload --optimize—— 生产环境推荐,把类路径预编译进数组,减少运行时解析开销 - 没执行这步,哪怕配置全对,新类也永远“Class not found”
验证是否走通,直接看映射文件最可靠
不要只信终端没报错,可以打开 vendor/composer/autoload_psr4.php,检查里面有没有你配的键,比如:
'App\' => array($baseDir . '/src')- 如果没出现,说明 dump 没成功,或 composer.json 格式有隐藏错误(比如多了一个逗号、引号没闭合)
- 也可以运行
composer show -p | grep autoload看是否识别到你的前缀



















