PSR规范的核心是PSR-1、PSR-4、PSR-12三条,覆盖95%协作需求;PSR-4要求命名空间、目录结构、文件名严格一一对应且大小写敏感;PSR-12是唯一应启用的基础代码风格规则集;纯PHP类文件必须省略?>闭合标签。

PSR规范不是靠“学”会的,是靠在写类、加依赖、跑CI时被报错逼出来的。你不需要背下全部20条PSR,只要盯住PSR-1、PSR-4、PSR-12这三条,就能覆盖95%的日常协作和工具链需求。
为什么composer dump-autoload总报“Class not found”
这不是 autoload 没生效,而是命名空间、目录结构、文件名三者没对齐。PSR-4 要求严格一一对应,大小写敏感,且不接受任何缩写或别名。
- 检查
composer.json中"psr-4"的前缀是否以反斜杠结尾,比如"App\": "src/",漏掉\会导致整个映射失效 - 确认类文件路径是否完全匹配命名空间:例如
namespace AppControllers;必须对应src/Controllers/目录,不能是src/controllers/(Linux 下大小写敏感) - 类名必须与文件名完全一致:
HomeController.php里只能定义class HomeController,不能是class homecontroller或class HomeControllerV2 - 运行
composer dump-autoload -o(带-o表示优化模式)后,检查vendor/composer/autoload_psr4.php是否生成了对应映射项
php-cs-fixer 配置里该用哪个规则集
别直接抄网上“全量 fix”配置。PSR-12 是当前唯一应作为基础的风格规范,其余如 PSR-2 已废弃,PSR-1 只管命名不涉及格式。
- 最小可用配置只需启用
@PSR12规则集:"rules": { "@PSR12": true } - 若项目已存在大量
if($a===true)这类写法,可额外加"strict_param" => true控制空格,但不要开"yoda_style"等非主流规则 - 注意
php-cs-fixer默认不处理文件头 BOM 和换行符,需单独加"no_unused_imports"、"declare_strict_types"等实用项 - 把配置写进
.php-cs-fixer.php,而非命令行参数,否则 CI 流程里容易漏掉
类文件里?>闭合标签到底要不要
要——除非它是纯 PHP 类文件。PSR-12 明确规定:纯 PHP 文件(即只含类/函数/常量声明,无输出)必须省略 ?>;含 HTML 或 echo 输出的混合文件才允许保留。
立即学习“PHP免费学习笔记(深入)”;
- 留着
?>容易在后面多出空白行或空格,导致 HTTP headers already sent 错误 - IDE 自动补全常默认加
?>,需手动关掉(如 PhpStorm 设置 → Editor → File and Code Templates → PHP Class → 删除末尾?>) - 用
php -l filename.php可快速验证语法,但它不会报闭合标签问题;真正检测得靠php-cs-fixer --dry-run - 团队一旦约定省略,所有新文件都必须遵守,否则 Git diff 里全是空行变更,干扰代码审查
最常被忽略的是 PSR-4 对“子命名空间必须对应子目录”的刚性要求——它不是建议,是自动加载器查找路径的硬编码逻辑。哪怕只是多了一层 Utils 目录却忘了在命名空间里体现,class_exists() 就会静默返回 false。



















