PSR-4自动加载基于命名空间前缀与物理目录的显式映射,通过composer.json配置(如"MyApp\": "src/"),生成autoload_psr4.php查表加载,需注意反斜杠结尾、路径一致性及执行composer dump-autoload生效。

Composer 的 PSR-4 自动加载不是黑盒,它靠的是映射规则 + 文件路径约定 + 自动注册的 autoload.php,核心在于“命名空间前缀”与“物理目录”的显式绑定。
PSR-4 是什么:不是自动发现,而是约定映射
PSR-4 不要求你把类文件按命名空间一层层嵌套到 src/ 下(那是 PSR-0 的老思路),而是允许你定义一个“命名空间前缀”对应一个“根目录”,之后类名中剩余部分(去掉前缀)会被转换为相对路径去查找文件。
比如配置:
"App\": "src/"
那么 AppControllerHomeController 就会尝试加载 src/Controller/HomeController.php —— 中间的 App\ 被剥离,剩下的 ControllerHomeController 直接转成路径 Controller/HomeController.php,再拼上根目录 src/。
关键点:
• 命名空间末尾必须带反斜杠(App\,不是 App),否则匹配失败
• 类名必须严格对应文件名(HomeController.php 里必须声明 class HomeController)
• 文件扩展名固定为 .php,不支持 .inc 或其他后缀
如何在 composer.json 中正确配置 PSR-4
打开项目根目录下的 composer.json,在 autoload 字段中写入映射:
- 单个前缀示例:
"autoload": { "psr-4": { "MyApp\": "src/" } } - 多个前缀可并列(常用于分离应用代码和测试代码):
"autoload": {
"psr-4": {
"MyApp\": "src/",
"MyApp\Tests\": "tests/"
}
} - 开发时若想让 Composer 立即生效,运行:
composer dump-autoload(或简写 composer du)
这会重新生成 vendor/autoload.php 和映射表 vendor/composer/autoload_psr4.php
Composer 自动生成了什么?看懂 autoload_psr4.php
执行 composer dump-autoload 后,Composer 会在 vendor/composer/ 下生成一个 autoload_psr4.php 文件。它本质是一个返回关联数组的 PHP 脚本,结构类似:
标签: php linux js json composer app
还木有评论哦,快来抢沙发吧~