Composer 2.0 起完全移除 PSR-0 支持,旧项目可通过 classmap 手动映射实现兼容,推荐逐步迁移到 PSR-4。

Composer 默认已不再支持 PSR-0,自 Composer 2.0 起完全移除了对 PSR-0 的自动加载逻辑。若你维护的是旧项目(如基于 Symfony 2.0–2.7、Zend Framework 1 或早期 Laravel),仍需 PSR-0 兼容,可通过手动配置 autoload 并配合类映射或文件映射实现“伪 PSR-0”行为。
PSR-0 已被废弃多年(2014 年被 PSR-4 取代),官方不再推荐。先检查:
Vendor_Name_Module_ClassName,且目录结构为 Vendor/Name/Module/ClassName.php
My_Class → My/Class.php)composer.json 中是否已有 "psr-0": {...} 字段(Composer 1.x 兼容但不生效于 2.x+)最稳妥的兼容方式:将所有 PSR-0 风格的类文件显式加入 classmap,让 Composer 扫描并生成静态映射表,绕过命名空间解析逻辑。
在 composer.json 中添加:
"autoload": {
"classmap": [
"library/",
"src/",
"modules/"
]
}然后运行:
composer dump-autoload -o
✅ 优势:完全无视命名规范,只要文件存在且类名匹配即可加载;✅ 兼容 Composer 2.x+;⚠️ 注意:新增类后需重新执行 dump-autoload。
仅限极特殊场景(如无法修改代码又必须动态加载):
composer self-update 1.10.25
"psr-0" 字段 + Composer 2.x —— 它会被忽略且无警告不是“要不要做”,而是“何时做”。可低风险推进:
"App\": "src/App/")sed 或 IDE 批量重命名旧类文件并加命名空间(如 My_Class → OldMyClass)基本上就这些。PSR-0 是历史包袱,不复杂但容易忽略它的实际加载路径——关键不在“声明规范”,而在确保类文件能被真实定位到。
以上就是如何让Composer在自动加载时遵循PSR-0规范?(旧项目兼容)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号