PSR-0 已被彻底移除,Composer 2.0+ 中无任何实现逻辑;PSR-4 要求前缀以双反斜杠结尾、路径映射仅含命名空间后缀、类名与文件名严格一致(含下划线),否则静默失败。

PSR-0 已不存在,别再查它的底层机制
Composer 2.0+ 代码里压根没 PSR-0 的实现逻辑——不是“不启用”,是连解析入口都删干净了。你在 composer.json 里写 "psr-0" 字段,composer dump-autoload 直接报错退出,错误信息类似 PSR-0 is not supported anymore 或 Invalid argument supplied for foreach()。所有关于“PSR-0 和 PSR-4 底层如何协作”的假设,从源头就站不住脚。
PSR-4 映射路径比类名少一层命名空间前缀
这是最常导致 Class not found 却查不出原因的点。PSR-4 不把整个命名空间塞进路径,只映射前缀之后的部分:
-
"App\": "src/"→App\Controllers\Home对应src/Controllers/Home.php - 同配置下,如果文件还放在
src/App/Controllers/Home.php,那它就是错的、不会被加载 - 旧 PSR-0 项目迁移时,必须手动把
src/App/下的Controllers/、Models/等目录提到src/一级
不挪目录只改 composer.json,运行时不会报错,只会静默失败。
下划线 _ 在 PSR-4 中完全无意义
PSR-0 把 My_Class_Name 拆成 My/Class/Name.php;PSR-4 要求文件名必须和类名**严格一致**,包括大小写和下划线:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
Vendor_Core_Utils类 → 必须对应Vendor_Core_Utils.php,且该文件必须在正确路径下 - 哪怕你把它放进
src/Utils.php,PSR-4 也不会识别 - 不想重命名类?直接删掉
psr-4配置,改用"classmap": ["legacy/"]让 Composer 扫描生成静态映射
PSR-4 前缀结尾反斜杠是硬性语法要求
JSON 里必须写成双反斜杠,否则解析失败:
-
"App": "src/"❌:没反斜杠,触发A non-empty PSR-4 prefix must end with a namespace separator -
"App/": "src/"❌:用了正斜杠,PHP 命名空间分隔符只能是\ -
"App\": "src/"✅:JSON 解析后为"App\",符合规范
这个错误看似是配置问题,实则是 PSR-4 加载器启动前的校验关卡——过不去,连映射逻辑都不会执行。
真正难调试的从来不是报错,而是那些没在 dump-autoload 阶段暴露、却在运行时突然找不到的类:含下划线的类名、残留的 src/App/ 嵌套结构、或以为能 fallback 实际根本没匹配上的命名空间。它们不会告诉你缺什么,只会让你对着空白的错误页面反复检查拼写。

















