Modern PHP 学习笔记:关于 PSR 规范
由于 PSR 规范最初来源于一个社区组织 —— PHP-FIG,因此在介绍 PSR 规范之前,先介绍一下 PHP-FIG。
PHP-FIG(PHP Framework Interop Group),是框架代表自发组织的,其成立的目标都是为了改进 PHP 社区。PHP-FIG 制定了推荐规范,PHP 框架可以自愿遵循这些规范,改进与其他框架的通信和共享功能。
PSR(PHP Standards Recommendation,PHP 推荐标准),是 PHP-FIG 制定的推荐规范。目前 PHP-FIG 一共制定并发布了五个推荐规范,本文只介绍其中的四个推荐规范(其实是 PHP-FIG 废弃了第一份推荐规范 PSR-0)。
- PSR-1:基本的代码风格
- PSR-2:严格的代码风格
- PSR-3:日志记录器接口
- PSR-4:自动加载
PSR-1:基本的代码风格
- PHP 标签:PHP 代码必须放在 或 标签中;
- 编码:所有 PHP 文件必须使用 UTF-8 字符集编码,且不存在 BOM;
- 目的:一个 PHP 文件可定义类、性状、函数等,或生成结果、处理数据,只能做其中一件事;
- 自动加载:PHP 命名空间和类必须遵守 PSR-4 自动加载器标准;
- 类的名称:必须一直使用驼峰式(如 CamelCase);
- 常量的名称:必须全部使用大写字母,可使用下划线把单词分开;
- 方法的名称:必须一直使用例如 camelCase 这种驼峰式。即方法名的首字母小写,后续单词的首字母大写。
PSR-2:严格的代码风格
- 贯彻 PSR-1 规范;
- 缩进:PSR-2 推荐规范要求 PHP 代码使用四个空格缩进,而非制表符缩进;
- 文件和代码行:必须使用 UNIX 风格的换行符(LF),最后要有一个空格,而且不能使用 PHP 关闭标签“?>”。每行代码最好不超过 80 个字符,至多不超过 120 个字符。每行末尾不应该有空格;
- 关键字:PSR-2 推荐规范要求,PHP 关键字应使用小写字母(如 true, false);
- 命名空间:每个命名空间声明与巨厚必须跟随一个空行。类似地,在一系列 use 声明语句后要加一个空行;如:
<?php namespace App\Models; use App\Utilties\Sms; class MyApp { // 类定义体 }
- 类:PSR-2 推荐规范要求,类定义体的起始花括号应在类名之后新起一行写;
- 方法:方法定义体的起始花括号要在方法名之后新起一行写;
- 可见性:类中的每个属性和方法都要声明可见性;
- 控制结构:所有控制结构关键字后面都要有一个空格。控制结构关键字后面的起始括号应和控制结构关键字写在同一行。控制结构关键字后面的结束括号必须单独写一行。如:
if ("test" != "text") { return true; }
PSR-3:日志记录器接口
符合 PSR-3 推荐规范的 PHP 日志记录器组件,必须包含一个实现 Psr\Log\LoggerInterface 接口的 PHP 类。PSR-3 接口复用了 RFC5424 系统日志协议,规定要实现九个方法:(PHP-FIG PSR-3)
<?php
namespace Psr\Log;
interface LoggerInterface
{
public function emergency($message, array $content = array());
public function alert($message, array $content = array());
public function critical($message, array $content = array());
public function error($message, array $content = array());
public function warning($message, array $content = array());
public function notice($message, array $content = array());
public function info($message, array $content = array());
public function debug($message, array $content = array());
public function log($level, $message, array $content = array());
}
PSR-4:自动加载器
有了自动加载器,无需像前面使用 include() 或 require() 手动引入文件,自动加载器策略能找到 PHP 类、接口或性状,然后在运行时按需将载入 PHP 解释器。
PSR-4 自动加载器策略:
PSR-4 推荐规范不要求改变代码的实现方式,只建议如何使用文件系统目录结构和 PHP 命名空间组织代码,因此 PSR-4 自动加载器策略也是依赖 PHP 命名空间和文件系统目录结构查找并加载 PHP 类、接口和性状。
PSR-4 主要是把命名空间的前缀和文件系统中的目录对应起来。我们可以告诉 PHP,\laijingwu\Http
命名空间中的类、接口和性状在文件系统 src/ 目录下,这样 PHP 就能索引 \laijingwu\Http\Utilities
命名空间对应于 src/utilities 目录。而在 laravel 中,\App\Utilities\Sms
类则对应的是 app/utilities/Sms.php 文件。
尽管我们能够自行编写 PSR-4 自动加载器的代码,但我们完全没有必要这样做,因为我们可以直接使用依赖管理工具 Composer 自动生成的 PSR-4 自动加载器。