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个字符以内,当一行代码过长时,应在合适的位置进行换行。
  • 命名空间和导入:在代码中使用命名空间时,应遵循一定的规范。例如,在声明命名空间后,应空一行再定义类、函数等代码。
  • 控制结构:控制结构(如ifelsewhilefor等)的关键字后必须有一个空格,其代码块必须使用花括号包裹,且左花括号应与关键字在同一行,右花括号应单独占一行。

PSR-3:日志接口规范

  • 日志级别:定义了8个日志级别,分别是DEBUGINFONOTICEWARNINGERRORCRITICALALERTEMERGENCY,每个级别都有其特定的含义和用途。
  • 日志记录方法:规范要求日志记录器必须实现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\RequestInterfacePsr\Http\Message\ResponseInterface等接口,用于表示HTTP请求和响应消息。
  • 消息的处理和操作:提供了一系列方法用于处理和操作HTTP消息,如获取消息头、设置消息头、获取消息体、写入消息体等。

PSR-12:扩展代码风格规范

  • 类、方法和函数的结构:对类、方法和函数的定义和结构进行了更详细的规范,包括类的属性和方法的排列顺序、方法的参数列表和调用方式等。
  • 控制结构和表达式:进一步细化了控制结构(如ifelsewhilefor等)的使用规范,以及表达式的书写方式和求值顺序。
  • 注释和文档:强调了代码注释的重要性,并对注释的内容和格式进行了规范,包括类、方法、函数的文档注释,以及代码中的行内注释等。

    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 请求,并处理响应。

标签: PHP

评论已关闭