composer 2.x 已完全移除 psr-0 支持,配置中保留 "psr-0" 会直接报错;psr-4 映射必须以反斜杠结尾(如 "app": "src/"),遗留下划线类名需用 classmap 显式声明。

不能混合使用 PSR-0 和 PSR-4 映射同一命名空间前缀,Composer 会静默忽略 PSR-0 配置(尤其在 2.0+ 版本中直接报错),且两者语义冲突——PSR-4 要求命名空间末尾带反斜杠 "App\",而 PSR-0 允许不带(如 "App")并触发兼容模式。
PSR-0 块在 composer.json 中已失效
Composer 2.x 完全移除了 PSR-0 支持。如果你的 composer.json 里还保留着 "psr-0" 字段,运行 composer install 或 composer dump-autoload 时会直接退出并报错:Invalid argument: psr-0 is not supported anymore。即使字段被注释掉,Composer 也会警告;若未注释但项目里存在老式下划线类名(如 My_Package_Utils),又没配 classmap,运行时就会抛出 Class not found。
- 别试图保留
"psr-0"块来“兼容旧代码”——它已经不是兼容性开关,而是错误源 - 检查
vendor/autoload.php是否真由 Composer 生成:如果项目手动引入了自定义 autoload,可能掩盖了配置失效问题 - 运行
composer show --platform确认当前 Composer 版本,2.0+ 没有回退选项
遗留类名必须用 classmap,不是 PSR-0
当你无法重命名 Legacy_Core_Helper 这类含下划线的类(比如第三方包已停止维护),唯一可靠方式是启用 classmap,让 Composer 扫描生成静态映射表。它不依赖命名规则,只认文件路径和 class 声明。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在
composer.json的"autoload"下添加:"classmap": ["legacy/", "vendor/old-package/src/"] - 运行
composer dump-autoload -o,生成优化后的autoload_classmap.php -
classmap优先级高于 PSR-4,同名类会以 classmap 结果为准,避免冲突 - 注意:扫描目录要精确,避免把
tests/或docs/误加进去,否则增大 autoload 文件体积
PSR-4 映射必须带末尾反斜杠
写成 "App": "src/" 是无效的——Composer 会把它当作 PSR-0 兼容模式处理,然后在 PHP 8+ 下失败。正确写法强制要求命名空间前缀以 结尾:"App\": "src/"。这是区分 PSR-4 和废弃行为的硬性语法标记。
- 多个前缀可共存,例如:
"App\": "src/", "Tests\": "tests/",但不能写成"Tests": "tests/" - Composer 内部按前缀长度倒序匹配,所以
"App\Http\": "src/Http/"会比"App\": "src/"优先命中 - 路径必须相对于
composer.json所在目录,"./src/"和"src/"等价,但"../src/"可能导致部署时路径错乱
真正麻烦的从来不是配置写法,而是那些散落在 __autoload、class_alias、字符串反射(new $className)里的硬编码类名——它们不会随 PSR-4 自动更新,改完 composer.json 后仍会崩。动手前先全局搜 new.*_ 和 class_alias.*_。










