Class not found 的根本原因是 Composer 自动加载映射未更新,需手动执行 composer dump-autoload -o 全量扫描并生成 classmap;新增、移动类或修改命名空间后必须重生成,否则 autoload 无法识别。

Class not found 却确认类存在?先跑 composer dump-autoload -o
这不是缓存问题,是映射表根本没更新。Composer 不会监听文件增删或命名空间改写,它只认 vendor/composer/autoload_psr4.php 和 autoload_classmap.php 里记着的内容——你加了 AppServicesPaymentService,但没重生成,那 autoload 就当它不存在。
- 新增类、移动类文件(比如从
src/Models/User.php改到src/Domain/User.php)、修改命名空间后,必须手动触发,composer install或update都不一定管这事 - 不加
-o:只重写 PSR-4 路径映射,不扫描磁盘上的 PHP 文件,新类进不了 classmap,也进不了 PSR-4 的实际匹配逻辑 - 加
-o:全量扫描所有 autoload 配置目录(如"App\": "src/"),把每个class声明都塞进autoload_classmap.php,运行时直接查表,不遍历目录 - 验证是否生效:用
php -r "require 'vendor/autoload.php'; var_dump(class_exists('App\Services\PaymentService'));"
什么时候不能加 -o?开发中乱加反而卡住自己
-o 是生产优化项,不是“更全”或“更对”的代名词。它会让 Composer 完全跳过动态路径推导,只依赖 classmap —— 这在开发阶段很危险。
- 你频繁改类名、挪文件、试命名空间,classmap 不会自动更新,
dump-autoload又没带-o,结果就是:代码改了,映射还是旧的,死活不生效 -
files类型加载(比如"files": ["src/helpers.php"])在-o模式下会被忽略——它不进 classmap,也不走 PSR 规则,只靠硬 require,而-o默认关闭这个通道 - 想保留
files或调试 PSR 匹配过程?用composer dump-autoload --no-dev或干脆不加参数,让 autoload 回退到动态查找模式
autoload-dev 里的类为啥总找不到?
因为 autoload-dev 是个“条件开关”,不是默认打开的。CI 脚本里跑了 composer install --no-dev,那你本地写的 TestsUnitUserTest 就算配置再对,也进不了 autoload 表。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
autoload-dev的内容(比如"Tests\": "tests/")只在--dev模式下生效;--no-dev会直接跳过整个 dev 配置块 - 测试类报
Class not found,先检查是不是 CI 或部署脚本用了--no-dev,再看有没有补composer dump-autoload --dev - 如果只想扫测试类、不碰主逻辑,可用
composer dump-autoload --dev -a:仅更新 PSR 映射,不重建 classmap,快且精准
路径和命名空间对不齐?dump-autoload 不报错,但一定失效
Composer 对 PSR-4 的校验是静默的。配错一个反斜杠、少一个 /、路径写成相对当前目录而非 composer.json 所在目录,它照常生成文件,但运行时就是找不到类。
-
"App\": "src/App"❌ 缺末尾/→ 应为"App\": "src/App/" -
"helpers.php"❌ 相对路径无效 → 必须写成"src/helpers.php"(相对于composer.json) - 命名空间声明写成
namespace AppServices,但 PSR-4 配的是"App\": "src/"→ 正确对应路径是src/Services/PaymentService.php,不是src/App/Services/... - 这类错误不会在
dump-autoload时提示,只能靠检查生成的vendor/composer/autoload_psr4.php内容来反推
最常被忽略的一点:classmap 生成依赖的是文件系统实时状态,不是 IDE 索引、不是 Git 状态、也不是你的记忆。你以为文件在那儿,但 dump-autoload -o 没跑过,它就真不在。

















