本文目录导读:

PHP 社区最主流、最权威的代码规范是 PSR 标准(PHP Standards Recommendation,PHP 标准建议),由 PHP-FIG(PHP Framework Interop Group,PHP 框架互操作小组)制定。
在实际开发中,主要遵循 PSR-1(基础编码规范)和 PSR-12(扩展编码风格指南),同时结合 PSR-4(自动加载规范)来组织项目结构。
以下是详细的梳理:
核心规范:PSR-12(当前主流)
PSR-12 是 PSR-2 的继承者,是目前最推荐的编码风格指南,它规定了代码的“长相”。
- 缩进:必须使用 4个空格 进行缩进,禁止使用 Tab 键。
- 换行:每行代码长度建议不超过 120 个字符(硬性限制为 80 个字符更好,但非强制,软限制为 120)。
- 大括号:
- 类、方法、控制结构(if, for, while):大括号必须独占一行(类和方法),但建议 控制结构(if/else)的大括号与结构名在同一行,结束大括号独占一行。
- 关键字:PHP 关键字(如
if、else、true、null)必须使用小写。 - 命名空间和 use:命名空间声明和
use声明必须各占一行,use语句必须按字母顺序排列。 - 方法:方法名后不得有空格, 前不得有空格, 前不得有空格。
- 可见性:所有属性和方法必须声明可见性(
public、protected或private),不能隐式地写成var。
基础规范:PSR-1
这是最底层的规则,所有 PHP 代码都必须符合。
- 文件:文件必须使用
<?php或<?=标签;文件必须不带 BOM 的 UTF-8 编码。 - 副作用:一个文件要么用来定义(类、函数、常量等),要么用来执行(业务逻辑),两者不能混合(即不要在定义类的文件里直接运行代码写逻辑)。
- 命名:
- 类名:必须使用 StudlyCaps(大驼峰,
UserController)。 - 方法名:必须使用 camelCase(小驼峰,
getUserName)。 - 常量:必须使用大写字母,以下划线分隔(
MAX_ATTEMPTS)。
- 类名:必须使用 StudlyCaps(大驼峰,
自动加载规范:PSR-4
虽然它不涉及代码风格,但它是项目结构的规范,现代框架(如 Laravel、Symfony)都依赖它。
- 命名空间与目录对应:完全限定的类名必须映射到文件路径。
- 示例:命名空间
App\Controllers对应目录./app/Controllers,类名HomeController必须存在于./app/Controllers/HomeController.php文件中。
除了 PSR 之外的默认规则
下面这些规则虽然不全是 PSR 强制要求的,但属于社区公认的“潜规则”或结合了 PSR 的常规用法:
- 组合规范(PSR-12 + 传统惯例):
- 命名空间:通常使用大驼峰(
App\Services)。 - 变量/属性:通常使用 camelCase(小驼峰,
$userName)。 - 函数:通常使用 camelCase(小驼峰,
getUserById())。
- 命名空间:通常使用大驼峰(
- 控制结构空格:
if、for、while等关键字后必须有一个空格,而函数调用后不能有空格。- 正确:
if ($a > $b) { echo "hi"; } - 错误:
if($a > $b)(关键字后没空格)
- 正确:
对于团队的落地建议
如果你是在团队中开发,仅仅依赖文档是不够的,建议使用以下工具强制规范:
- PHP-CS-Fixer(最常用):完全自动修复代码风格,直接符合 PSR-12。
- 命令:
php-cs-fixer fix path/to/project --rules=@PSR12
- 命令:
- PHP_CodeSniffer (PHPCS):检测代码是否符合规范。
- 命令:
phpcs --standard=PSR12 path/to/file
- 命令:
- PHPStan / Psalm:这是静态分析工具(检查逻辑错误),不直接管风格,但通常与 PSR 规范配合使用。
最核心的答案:遵循 PSR-1 和 PSR-12(如果是老项目或框架如 Laravel 5 之前的,可能会用 PSR-2,但现在统一切换到 PSR-12)。
如果你使用的是 Laravel,Laravel 官方也是基于 PSR-4 自动加载,并建议遵循 PSR-12(Laravel 框架代码本身用 PSR-2 编写,但官方公开文档要求新代码遵循 PSR-12)。