composer自动加载依赖显式注册的映射表而非猜测,核心是require_once 'vendor/autoload.php'启动加载链,并执行composer dump-autoload更新映射文件。

Composer自动加载根本没在“猜”,它靠的是映射表+显式注册
Composer 自动加载不是 PHP 自己发现类在哪,而是你写清楚“哪个命名空间对应哪个目录”,它生成一张查表(比如 vendor/composer/autoload_psr4.php),再用 spl_autoload_register() 把这个查表函数挂进 PHP 的自动加载链里。没执行 require_once 'vendor/autoload.php'?那整个链压根没注册,Class not found 不是找不到类,是连加载器都没启动。
- 入口文件第一行必须有
require_once 'vendor/autoload.php';,漏掉这句,后面全白搭 -
vendor/autoload.php是生成的,不是配置文件——改它没用,每次composer dump-autoload都会覆盖 - 真正唯一有效的配置入口,只有项目根目录下的
composer.json里的autoload字段
PSR-4 不是路径自动推导,是命名空间前缀到目录的硬绑定
比如配了 "App": "src/",那 AppControllerHome 就严格对应 src/Controller/Home.php:先剥离前缀 App,剩下 ControllerHome → 转成路径 Controller/Home.php → 拼上 src/ → 最终加载 src/Controller/Home.php。中间任何一环对不上,就直接失败。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
namespace必须以反斜杠结尾("App": "src/"),写成"App"或"App\"都会静默失效 -
"src/"是相对于composer.json的路径,不是相对于当前脚本、也不是相对于vendor/autoload.php - 文件名必须和类名完全一致(
class Home必须在Home.php),不支持大小写混用、不支持.inc等非.php后缀
改了配置或加了新类,不运行 composer dump-autoload 就等于没改
composer dump-autoload 不是“刷新缓存”,它是重生成所有映射文件(autoload_psr4.php、autoload_classmap.php 等)。你调了命名空间、挪了文件位置、增删了 autoload 配置项,只要没跑这命令,PHP 还在用旧表查路径。
- 开发中新增一个
AppServiceUserService类,写了文件也改了composer.json,但忘了composer dump-autoload→ 运行时直接报错 -
composer dump-autoload -o会合并 classmap 提升性能,但会固化映射——之后新增类不会自动进表,调试阶段建议不用-o - CI/CD 流水线若用了
composer install --no-dev,而你的测试类写在autoload-dev里,那这些类在构建环境里根本不可见
PSR-4、classmap、files 三者混用,优先级和用途完全不同
PSR-4 是首选,适合标准类结构;classmap 是兜底方案,适合老代码或类名/文件名不一致的情况;files 是无条件加载,只适合纯函数/常量文件,不能放类定义。
- PSR-4 匹配不上时,才会 fallback 到 classmap 查找,所以两者可共存,但别让同一个类能被两条规则同时命中(行为不可控)
- classmap 路径如
"legacy/"会被递归扫描,但新增文件后必须手动composer dump-autoload,否则不会生效 -
files里的路径必须写全(如"src/functions.php"),不能写相对当前脚本的路径;而且多个包的files加载顺序不可控,有依赖关系时慎用
require_once 'vendor/autoload.php',或者改完 composer.json 忘了 composer dump-autoload。这两步,缺一不可。










