PHP 之 PSR 标准规范

PSR(PHP Standards Recommendation) 是由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。

由于标准在不断制定,本文主要介绍 PSR-1、PSR-2、PSR-3、PSR-4的一些主要细节,后面逐步更新所有标准。

PSR-1 基本的代码风格

PHP 标签

PHP 代码必须放在 <?php ... ?><?= ...?> 标签中。

编码

无 BOM 的 UTF-8 字符集。

自动加载

命名空间和类必须遵守 PSR-4 自动加载器标准。

类名

驼峰式:所有单词首字母大写。

参量名

全部大写,如果需要可添加下划线分隔单词。

方法名

驼峰式:首字母小写,后续单词首字母大写。

PSR-2 严格的代码风格

贯彻 PSR-1 ⭐️

缩进

四个空格(一般编辑器都可以设置:将一个制表符转换为4个空格)。

文件和代码行

  1. PHP 文件采用 UNIX 风格换行符(LF),末尾一个空行;
  2. 每行代码推荐小于80个字符,最大120。

关键字

使用小写字母,如:true、false

命名空间

  1. 命名空间声明(namespace)语句后紧跟一个空行;
  2. 导入命名空间(use)时,最后跟一个空行。

  1. 类定义体的起始括号在类名之后新起一行
  2. extends 与 implements 关键字必须与类名在同一行。
1
2
3
4
ClassName extends ParentClass implements Interface
{
// ...
}

方法

  1. 方法定义体的起始括号在方法名之后新起一行;
  2. 方法定义体结束括号后新起一行;
  3. 方法参数的括号两边没有空格;
  4. 每个参数(除最后一个)后面跟一个逗号和空格。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
namespace app;

Class
{
public function f1($var1, $v2 = null)
{
// ...
}

public function f2($v3)
{
//
}
}

可见性

  1. 类中的每个属性和方法都要声明可见性:public、private、protected;
  2. 不要在私有方法前加下划线(_);
  3. abstract 或 final 放在可见性关键字之前;
  4. static 放在可见性关键字之后。

控制结构

  1. 涉及关键字:if、else、elseif、switch、case、while、do while、for、foreach、catch。
  2. 如果控制关键字后面有一对括号(与关键字在同一行),则起始括号后面、结束括号前面不能有空格;
1
2
3
4
5
6
7
if ($me->isAlive() === true) {
do {
// ...
} while ($me->isWorking());

$me->sayHaha();
}

PSR-3 日志记录器接口

提供类一个日志接口 Psr\Log\LoggerInterface,其复用类 RFC 5424 系统日志协议,详见:http://tools.ietf.org/html/rfc5424

推荐 monolog/monolog,一个实现类 PSR-3 的日志记录器。

PSR-4 自动加载

基于命名空间查找和加载类、接口、性状。

推荐使用 Composer 包依赖管理工具,使用方法参照这里