psr-4适用于现代php项目,按命名空间与目录结构自动映射,开发友好;classmap用于遗留代码,需手动dump-autoload更新;autoload-dev专管测试类,避免污染生产环境;files加载全局函数文件,路径须相对且需手动刷新自动加载映射。

autoload 字段写不对,composer install 不报错,但 new MyClass() 一定报 Class not found —— 因为 Composer 根本没把你的类注册进自动加载映射里。
psr-4 和 classmap 到底该选哪个
绝大多数现代 PHP 项目用 psr-4:它按命名空间 + 目录结构映射,开发时改类名、加目录都自动生效;classmap 是扫描指定路径下所有 .php 文件生成静态类列表,适合遗留代码或含非标准命名的文件(比如 functions.php)。
-
psr-4要求目录名严格匹配命名空间小写部分(如"App\": "src/"→src/Controller/HomeController.php里必须是namespace AppController;) -
classmap不校验命名空间,但运行composer dump-autoload才会重新扫描,新增文件不自动识别 - 别混用:同一命名空间不要既在
psr-4又在classmap里配置,Composer 会以psr-4为准,后者被忽略
autoload-dev 里放什么才不污染生产环境
autoload-dev 里的路径只在 composer install --no-dev 以外生效,测试类、Mock 类、tests/ 下的引导文件都该放这儿 —— 否则生产环境也会加载它们,可能触发未安装的 dev-only 依赖。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 常见错误:把
"Tests\": "tests/"写在根autoload里,导致线上new TestsFooTest()不报错(但不该存在) - 正确写法:
"autoload-dev": { "psr-4": { "Tests\": "tests/" } } - 注意:如果测试类依赖
phpunit等,它们本身不在autoload里,所以不会因自动加载而引发依赖缺失问题
files 数组为什么总被忽略
files 用于直接加载全局函数文件(如 src/helpers.php),但它只在每次 Composer 自动加载器初始化时执行一次 —— 不是“每次调用就 include”,也不是“按需加载”。
- 必须写成相对
composer.json的路径:"files": ["src/helpers.php"],不能写./src/helpers.php或绝对路径 - 如果 helpers.php 里有语法错误,
composer dump-autoload不报错,但运行时首次加载自动加载器就会 fatal error - 多个文件按数组顺序加载,后面文件能用前面定义的函数,但别指望它解决循环依赖
最常被漏掉的是:改完 autoload 后没运行 composer dump-autoload(或 composer install),导致新配置完全不生效。Composer 不会监听 composer.json 自动重生成映射。










