psr-12是php-fig制定的现代编码风格规范,替代psr-2,覆盖php 7.4+新特性,通过统一文件结构、类定义、控制结构和自动工具链,提升代码一致性、可读性与协作效率。

PSR-12 是 PHP-FIG 制定的现代编码风格规范,替代了已废弃的 PSR-2,覆盖 PHP 7.4+ 新特性(如属性类型、联合类型、构造器属性提升),核心目标是提升代码一致性、可读性与协作效率。它不是“建议”,而是被主流框架(Laravel 9+、Symfony 6+、ThinkPHP 6+)和工具链(PHP-CS-Fixer、PHP_CodeSniffer)默认采纳的事实标准。
文件结构与基础格式
所有 PHP 文件必须严格遵循以下结构顺序,块之间用单个空行分隔:
- 以
<?php开头,纯 PHP 文件禁止写?>结束标签 - 可选的文件级 DocBlock(如版权说明),紧随
<?php - 可选的声明语句(如
declare(strict_types=1);),必须在命名空间之前 - 命名空间声明(
namespace)必须是该块第一行,之后必须有一个空行 -
use声明按字母顺序分组:类、函数、常量分别归类,每组内部排序,组间空行,最后一组后必须空行 - 文件必须以 UTF-8 编码(无 BOM),仅使用 Unix LF 换行,末尾以一个非空行结束
类与成员定义规范
类结构强调显式性和区块清晰:
- 类、接口、trait 必须显式声明
public/protected/private,禁止省略访问修饰符 - 抽象类必须用
abstract关键字;接口必须用interface,且推荐以Interface结尾(如UserRepositoryInterface) - 属性和方法声明前需有空行;同类成员之间不强制空行,但不同逻辑区块(如属性区与方法区)之间必须空行
- 方法参数列表中,逗号后必须加空格;冒号前后各一个空格(如
function foo(string $name): int) - 类型声明统一用短名:
int而非integer,bool而非boolean,null和void小写
控制结构与表达式格式
提升逻辑可读性,减少歧义:
-
if、foreach、while、for、switch等控制结构的左花括号{必须与关键字同行,右花括号}单独一行 -
else和elseif必须与上一个}同行,中间用空格分隔(如} else {) - 运算符两侧必须有空格(
$a + $b),但数组下标[和函数调用(前不加空格($arr[0]、foo($x)) - 行长度软限制为 120 字符,推荐不超过 80 字符;超长表达式应合理换行,缩进对齐(如参数每行一个,缩进 4 空格)
- 禁止尾随空格,每行只写一个语句
自动工具落地关键点
规范价值在于执行,而非纸上谈兵:
- 用
php-cs-fixer配置@PSR12规则集,支持一键修复 - CI 流程中加入
--dry-run --diff检查,失败即阻断合并 - IDE(如 PHPStorm)同步启用 PSR-12 格式化模板,编辑时实时提示
- Git pre-commit 钩子集成格式化命令,确保提交代码始终合规
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











