PSR-0 已被废弃,Composer 2.0+ 完全移除支持;项目若需加载 PSR-0 风格类(如 Vendor_Name_ClassName → vendor_name/class_name.php),须降级至 Composer 1.x 并在 composer.json 的 autoload 段中配置 psr-0 键,例如 {“autoload”: {“psr-0”: {“Acme_”: “src/”}}},表示 Acme_Foo_Bar 映射为 src/Acme/Foo/Bar.php(下划线转斜杠,首字母大写保留);psr-0 值必须是字符串路径,多路径需用数组(仅 Composer 1.10.1+ 支持),路径须存在且可读,否则运行时报 Class not found;PSR-0 被弃用因其设计歧义(下划线语义不明确),而 PSR-4 通过明确命名空间与目录映射解决该问题;Composer 2.x 移除全部 psr-0 代码,遇到该字段仅警告并跳过;主流框架自 2015 年起全面转向 PSR-4,旧项目迁移推荐调整目录结构与 composer.json 为 psr-4,并将类名改为命名空间形式(如 namespace Acme\Foo; class Bar),若无法修改类名可用 “files
PSR-0 已被废弃,Composer 2.0+ 完全移除支持;若项目仍需加载 PSR-0 风格的类(如 Vendor_Name_ClassName 映射到 vendor_name/class_name.php),必须降级到 Composer 1.x 并手动配置 autoload —— 但这是临时兼容方案,不建议长期使用。
Composer 1.x 中如何声明 PSR-0 自动加载
在 composer.json 的 autoload 段中显式写入 psr-0 键(注意:Composer 2.0+ 解析时会直接报错 Invalid argument supplied for foreach() 或忽略该字段):
{
"autoload": {
"psr-0": {
"Acme_": "src/"
}
}
}
上述配置表示:所有以 Acme_ 开头的类名,按 PSR-0 规则拆解为目录路径,例如 Acme_Foo_Bar → src/Acme/Foo/Bar.php(下划线转斜杠,首字母大写保留)。
-
psr-0值必须是字符串(路径),不能是数组(Composer 1.x 不支持多路径映射同一前缀) - 若需多个根路径,要写多个键:
"Acme_": ["src/", "legacy/"]—— 仅 Composer 1.10.1+ 支持数组值 - 路径必须存在且可读,否则
composer dump-autoload不报错,但运行时抛出Class not found
为什么 Composer 2.x 不再支持 PSR-0
PSR-0 存在歧义设计:下划线既可能表示命名空间分隔符,也可能只是类名一部分(如 My_Class_v2),导致自动加载器无法可靠推导文件路径。PSR-4 用明确的命名空间 + 目录映射消除了该问题。