PHP PSR-2 代码规范中文版详解
本文整理了 PHP FIG 组织制定的 PSR-2 代码样式规范,旨在通过统一格式化规则减少不同开发者在浏览代码时的认知差异。规范涵盖了文件结束符、缩进方式、类方法定义、控制结构及闭包等核心内容,帮助团队建立一致的编码标准。
为何需要规范
规范并非义务,但使用统一的规范能让合作项目更轻松。现代应用通常由多个模块组成,缺乏规范会使理解和沟通变得复杂。正如 Google 执行严格代码规范的实践所示,良好的缩进、命名和文件结构能让阅读任意一段代码变得简单,从而节省大量时间。
核心原则与大纲
本指南依据 RFC 2119 中的关键词描述要求,如“必须”(MUST)、“应当”(SHOULD)。以下是 PSR-2 的核心规则摘要:
- 基础遵守:代码必须遵守
PSR-1基本代码规范。 - 缩进:必须使用 4 个空格的缩进,禁止使用制表符。
- 行长度:无硬性限制,软限制为 120 字符,建议不超过 80 字符。
- 空白行:
namespace声明后必须有空行,use代码块后也必须有一个空行。 - 花括号位置:类的左花括号放下一行,右花括号放类主体下一行;方法的左花括号放下一行,右花括号放方法主体下一行。
- 可见性:所有属性和方法必须有可见性(public/protected/private)声明;
abstract和final在可见性之前,static在可见性之后。 - 控制结构:关键词后有空格,左花括号同行为右花括号下一行;左括号后/右括号前无空格。
示例代码展示
以下示例展示了上述部分规则的通用写法:
<?php
namespace Vendor\Package;
use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class Foo extends Bar implements FooInterface
{
public function sampleFunction($a, $b = null)
{
if ($a === $b) {
bar();
} elseif ($a > $b) {
$foo->bar($arg1);
} else {
BazClass::bar($arg2, $arg3);
}
}
final public static function bar()
{
// method body
}
}
详细规范说明
第1步:文件与行格式处理
目的是确保文件在不同操作系统下的一致性并提高可读性。
- 换行符:必须使用 Unix LF (换行)。
- 结尾:文件必须以空行结束,纯 PHP 文件省略关闭标签
?>。 - 行长限制:软限制 120 字符(警告不报错),实际推荐不超过 80 字符以便拆分显示。非空行末尾不可有空格。
- 语句数量:一行不应多于一个语句。
第2步:关键字与常量书写
保持语言内置元素的一致性。
- PHP 关键字(如
if,else,class等)必须小写。 - 常量
true,false,null必须小写。
第3步:Namespace 与 Use 声明
规范命名空间的引入方式,避免依赖混乱。
namespace声明后必须有一个空行。- 所有的
use声明必须放在namespace下方。 - 每个
use关键字仅用于一个声明(禁止use A, B;写法)。 use代码块后面必须有一个空行。
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
// ... additional PHP code ...
第4步:类、属性与方法定义
明确类结构的视觉层级,便于快速定位逻辑。
- 继承:
extends和implements与类名同行;左花括号另起一行。implements列表可分行,每项占一行且缩进一次。 - 属性:必须声明可见性,禁止使用
var;禁止单一下划线前缀表示保护/私有。 - 方法:必须声明可见性;左花括号另起一行;参数间逗号后有空格,逗号前无空格;默认值参数置于列表最后。
- 修饰符顺序:
abstract/final在前,static在后,可见性居中。
第5步:控制结构格式化
统一流程控制块的视觉形态,防止嵌套错误。
- 通用规则:关键词后有空格,右括号与左花括号间有空格,主体缩进一次,右花括号主体下一行。
- If/Elsif/Else:推荐使用
elseif替代else if,else和elseif与前一个主体的右花括号同行。 - Switch/Case:
case从 switch 处缩进,break与 case 主体同级缩进;非空 case 下落需注释// no break。 - Loop/Try:
while,for,foreach均遵循标准括号规则;try/catch各分支独立成块。
第6步:闭包 (Closure) 规范
确保匿名函数在传递和定义时的清晰度。
function关键词后及use前必须有空格。- 左花括号与声明同行,右花括号主体下一行。
- 参数和变量列表可分行,每项占一行并缩进;分行时右括号与左花括号间保留空格。
简要总结
PSR-2 通过强制性的格式约定,将 PHP 代码的风格差异降至最低。虽然它忽略了操作符对齐、注释风格等非功能性细节,但在类结构、控制流和命名空间管理等关键领域的标准化,对于构建大型、可维护的 PHP 项目至关重要。以上就是 PHP PSR-2 代码规范中文版的详细内容,更多关于 PHP 开发规范的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









