autoload必须是composer.json顶层键,命名空间、路径、类名须逐字符对齐,改配置后需手动运行composer dump-autoload生效。

composer.json 的 autoload 必须是顶层键,不能嵌套或拼错
PSR-4 不生效,90% 是因为 autoload 没写在 composer.json 的根层级。它必须和 name、require 并列,而不是塞进 require-dev 或 scripts 里。
常见错误写法:
-
"require": { "autoload": { "psr-4": { "MyLib\": "src/" } } }→ Composer 完全忽略 -
"autoloader": { ... }或"auto-load"→ 键名拼错,不识别
正确结构只有一层:autoload 是顶级字段,且只认标准键名。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
命名空间、目录、类名三者必须逐字符对齐
Composer 不扫描文件,只做字符串替换:剥离命名空间前缀后,把剩余段落用 / 连接,再拼上配置路径。差一个大小写、多一级目录、少一个反斜杠,就直接失败。
- 命名空间声明必须以双反斜杠结尾:
MyLib\✅,MyLib❌(JSON 中单反斜杠会被转义) - 路径必须是相对路径、正斜杠结尾:
"src/"✅,"src"❌(否则可能拼出srcMyClass.php) - 目录结构必须严格反映命名空间:
namespace MyLibHttp;→ 对应src/Http/,不是src/http/ - 类名必须与文件名完全一致:
class ApiClient→ 文件必须叫ApiClient.php,不能是apiclient.php
改完配置后必须手动运行 composer dump-autoload
vendor/autoload.php 只是注册加载器入口,真正起作用的是 vendor/composer/autoload_psr4.php —— 这个文件不会自动更新,也不会报错提醒你漏了这步。
- 开发阶段用
composer dump-autoload(不加-o),能暴露路径拼接错误 - 加了
-o会生成 classmap,跳过 PSR-4 路径检查,反而掩盖问题 - CI/CD 部署时建议加
--no-dev,避免autoload-dev里的测试类混入生产环境 - 可直接验证映射是否生效:
var_dump(include 'vendor/composer/autoload_psr4.php');看数组里有没有你的命名空间项
多个 PSR-4 映射共存时注意前缀长度和顺序
Composer 按命名空间前缀长度降序匹配,不是按配置顺序。比如同时配了 "App\": "src/" 和 "App\Http\": "app/Http/",后者永远不会命中——因为 App\ 更长,先被匹配。
- 所有映射必须放在同一个
psr-4对象里,不能重复写键名:"App\": "src/"和"Tests\": "tests/"是合法的;但两个"App\"会互相覆盖 - 路径不能以
/开头,也不能含../或绝对路径 - 命名空间声明行不能有前导空格或 tab:
namespace MyLib\Util;✅,namespace MyLib\Util;❌
dump-autoload 的手动触发——Linux/macOS 下 src/Util/Helper.php 和 src/util/helper.php 是两个不同路径,而 Composer 默认不会告诉你它找的是哪个。










