PHP PSR-2 代码规范中文版详解

温以宁
温以宁
发布时间:2026-10-14| 5人浏览过
原创

本文整理了 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 开发规范的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。