PHP PSR 代码标准规范
PHP-FIG (PHP Framework Interop Group)直译过来叫 PHP 框架可互用性小组,由几位开源框架的开发者成立于 2009 年,从那开始也选取了很多其他成员进来(包括但不限于 Laravel, Joomla, Drupal, Composer, Phalcon, Slim, Symfony, Zend Framework 等),虽然不是「官方」组织,但也代表了大部分的 PHP 社区。
项目的目的在于:
通过框架作者或者框架的代表之间讨论,以最低程度的限制,制定一个协作标准,各个框架遵循统一的编码规范,避免各家自行发展的风格阻碍了 PHP 的发展,解决这个程序设计师由来已久的困扰。
目前已表决通过了不少套标准,已经得到大部分 PHP 框架的支持和认可。
本项目的主要面向对象是所有参与的各个成员(也就是各自框架的社区)。
Github 地址:
https://github.com/php-fig
官网:
https://www.php-fig.org/
https://www.php-fig.org/psr/
中文翻译的网站
https://learnku.com/docs/psr
https://github.com/little-gg-bound/php-psr-chinese
PSR主要内容
PHP Standards Recommendations(PHP-PSR)是PHP开发的一系列规范,旨在提高PHP代码的一致性、可读性和可维护性。以下是PSR 1-7规范的主要内容:
PSR-1:基本代码规范
- 文件结构:PHP代码必须使用
<?php
或<?=
标签开始,且不能有结束标签?>
,以避免在包含文件时出现意外的输出或空格。 - 编码风格:只使用
<?php
和<?=
两种标签,文件必须使用UTF-8编码且无BOM头。 类、函数和常量的命名:
- 类名必须采用大写字母开头的驼峰命名法,如
MyClass
; - 函数名和方法名采用小写字母开头的驼峰命名法,如
myFunction
; - 常量名必须全部大写,单词间用下划线分隔,如
MY_CONSTANT
。
- 类名必须采用大写字母开头的驼峰命名法,如
PSR-2:代码风格规范
- 缩进和换行:使用4个空格进行缩进,而不是制表符。每行代码长度应尽量控制在80个字符以内,当一行代码过长时,应在合适的位置进行换行。
- 命名空间和导入:在代码中使用命名空间时,应遵循一定的规范。例如,在声明命名空间后,应空一行再定义类、函数等代码。
- 控制结构:控制结构(如
if
、else
、while
、for
等)的关键字后必须有一个空格,其代码块必须使用花括号包裹,且左花括号应与关键字在同一行,右花括号应单独占一行。
PSR-3:日志接口规范
- 日志级别:定义了8个日志级别,分别是
DEBUG
、INFO
、NOTICE
、WARNING
、ERROR
、CRITICAL
、ALERT
和EMERGENCY
,每个级别都有其特定的含义和用途。 - 日志记录方法:规范要求日志记录器必须实现
Psr\Log\LoggerInterface
接口,该接口定义了8个日志记录方法,对应8个日志级别。 - 日志上下文:每个日志记录方法都可以接受一个可选的上下文数组作为参数,用于提供更多的日志信息。
PSR-4:自动加载规范
- 命名空间与文件路径的映射:规定了将PHP命名空间与文件系统路径进行映射的标准方式。一个完全限定的类名(包括命名空间和类名)对应一个文件路径,其中命名空间中的分隔符
\
将转换为文件系统中的目录分隔符。 - 自动加载器的实现:要求自动加载器实现
Psr\Autoload\AutoloaderInterface
接口,或者使用spl_autoload_register
函数注册一个符合规范的自动加载函数。
PSR-6:缓存接口规范
- 缓存操作:定义了一套统一的缓存操作接口,包括获取缓存、设置缓存、删除缓存、检查缓存是否存在等操作。
- 缓存项的标识和过期时间:缓存项通过一个唯一的键来标识,这个键可以是字符串或其他可哈希的数据类型。缓存项可以设置过期时间,过期后将被自动删除。
- 缓存驱动的实现:规范要求缓存驱动实现
Psr\Cache\CacheItemPoolInterface
接口,不同的缓存存储(如文件缓存、内存缓存、数据库缓存等)可以通过实现该接口来提供统一的缓存操作方法。
PSR-7:HTTP消息接口规范
- HTTP消息的结构:将HTTP请求和响应抽象为消息对象,包括消息头、消息体、状态码等部分。
- 消息接口的定义:规范定义了
Psr\Http\Message\RequestInterface
,Psr\Http\Message\ResponseInterface
等接口,用于表示HTTP请求和响应消息。 - 消息的处理和操作:提供了一系列方法用于处理和操作HTTP消息,如获取消息头、设置消息头、获取消息体、写入消息体等。
PSR-12:扩展代码风格规范
- 类、方法和函数的结构:对类、方法和函数的定义和结构进行了更详细的规范,包括类的属性和方法的排列顺序、方法的参数列表和调用方式等。
- 控制结构和表达式:进一步细化了控制结构(如
if
、else
、while
、for
等)的使用规范,以及表达式的书写方式和求值顺序。 注释和文档:强调了代码注释的重要性,并对注释的内容和格式进行了规范,包括类、方法、函数的文档注释,以及代码中的行内注释等。
PSR-13
PSR-14: Simple Cache (简单缓存)
- 简单缓冲,定义了缓存接口,允许开发者使用不同的缓存实现,而无需修改代码。它提供了一组简单的接口来获取、设置、删除缓存项,以及处理缓存失效。
PSR-15
PSR-17 HTTP 工厂
- HTTP 工厂 旨在为创建 HTTP 相关的对象提供统一的工厂接口,包括请求(Request)、响应(Response)、服务器请求(ServerRequest)、上传文件(UploadedFile)等,以实现不同 HTTP 组件之间的互操作性和可替换性。
PSR-18: HTTP Client (HTTP 客户端)
- HTTP 客户端,定义了 HTTP 客户端的接口,用于发送 HTTP 请求和接收响应。它不依赖于特定的 HTTP 客户端实现,提供了一组通用的接口来发送各种类型的 HTTP 请求,并处理响应。
评论已关闭