目录
PSR,即PHP Standard Recommendations(PHP编程标准建议)
PSR-1,是 PHP Framework Interop Group (PHP-FIG) 提出的一项编码标准
PSR-2 ,它在 PSR-1 的基础上提供了更详细的编码风格指南
PSR-3,是 PHP-FIG 定义的日志记录接口标准
PSR-4,是 PHP-FIG 提出的一项关于自动加载的规范
PSR-7, 是 PHP-FIG 定义的一套 HTTP 消息接口标准
PSR-11,是 PHP-FIG 定义的依赖注入容器接口标准
PSR-12,是 PHP-FIG 提出的一套扩展的编码风格指南。
PSR-13,是 PHP-FIG 定义的 HTTP 服务器请求处理程序接口标准
PSR-14,是 PHP-FIG 定义的事件调度器接口标准
PSR-15,是 PHP-FIG 定义的 HTTP 中间件接口标准
PSR-16,是 PHP-FIG 定义的简单缓存接口标准
PSR,即PHP Standard Recommendations(PHP编程标准建议)
是一系列由PHP Framework Interop Group (PHP-FIG) 提出的PHP编程标准建议。
这些建议旨在为PHP社区提供统一的编码规范、接口标准和最佳实践,以促进不同框架和库之间的互操作性,提高代码的可读性、可维护性和可扩展性
PSR-1,是 PHP Framework Interop Group (PHP-FIG) 提出的一项编码标准
旨在为 PHP 代码制定一套基础的格式和组织规则。以下是 PSR-1 的几个关键点详细介绍:
-  文件编码: - PHP 代码必须使用 UTF-8 编码。
 
-  文件扩展名: - PHP 文件必须使用 .php扩展名。
 
- PHP 文件必须使用 
-  Shebang 行: - 如果 PHP 文件被设计为从命令行执行,第一行应该是一个 shebang 行,例如 #!/usr/bin/env php。这行应该被放在文件的最开始,即使文件是通过 Web 服务器访问的。
 
- 如果 PHP 文件被设计为从命令行执行,第一行应该是一个 shebang 行,例如 
-  __halt_compiler() 函数: - 不推荐使用 __HALT_COMPILER(); 如果使用,它必须放在文件末尾,并且是最后一行。
 
- 不推荐使用 
-  命名空间和类: - 每个 PHP 文件应该声明一个且只有一个命名空间和类。
- 类名必须使用 StudlyCaps(类似于驼峰命名法,但首字母大写)。
 
-  类常量、属性和方法: - 类中的常量命名应该全部大写,下划线分隔。
- 属性命名应该遵循 camelCase 规则,即第一个单词小写,后续单词首字母大写。
- 方法命名也应该遵循 camelCase 规则。
 
-  控制结构: - 控制结构(如 if、else、while、for、foreach)的语法必须遵守一定的格式,例如使用大括号{}包围代码块,即使它们是单行表达式。
 
- 控制结构(如 
-  控制结构的关键字: - 控制结构的关键字(如 else、elseif、endif)必须和结束括号在同一行。
 
- 控制结构的关键字(如 
-  函数调用: - 函数调用时,参数列表应该在函数名之后立即开始,并且每个参数应该在新的一行,除非它们很短并且可以放在一行内。
 
-  自动全局变量: - 应该避免使用自动全局变量,除非它们是 PHP 保留的或者明确需要。
 
PSR-1 的目标是提高 PHP 代码的可读性和一致性,使得不同开发者编写的代码风格统一,便于团队协作和代码维护。遵循 PSR-1 标准是编写高质量 PHP 代码的良好起点,并且可以作为更严格编码标准(如 PSR-2 和 PSR-12)的基础。
PSR-2 ,它在 PSR-1 的基础上提供了更详细的编码风格指南
PSR-2 的目的是统一 PHP 代码的格式,使代码更加易读和一致。以下是 PSR-2 的一些关键点详细介绍:
-  文件格式: - PHP 代码必须使用 UTF-8 编码。
- 文件必须以一个空行结束。
 
-  行长度: - 软性限制:每行代码不应超过 80 个字符。
- 硬性限制:绝对不超过 120 个字符。
 
-  缩进: - 使用 4 个空格进行缩进,不使用制表符(Tab)。
 
-  空白: - 在 PHP 开始标签 <?php之后必须有一个空行。
- 在 PHP 结束标签 ?>之前必须有一个空行,除非文件以 PHP 结束标签结束。
- 在命名空间声明之前必须有一个空行。
 
- 在 PHP 开始标签 
-  命名空间和类: - 命名空间声明必须位于文件顶部,且之前不能有其他代码。
- 类声明必须位于文件顶部,且之前不能有其他代码,除非有注释或使用声明。
 
-  类内结构: - 类的属性和方法之间必须有一个空行。
- 可见性修饰符(如 public、protected、private)在类内部声明时应保持一致的顺序。
 
-  控制结构: - 控制结构的关键字(如 if、else、elseif、switch、case、default、for、foreach、while、do、while、try、catch、finally)后面必须有一个空格。
- 控制结构的括号内不应包含空格。
 
- 控制结构的关键字(如 
-  函数调用和声明: - 函数调用时,参数列表的括号内不应包含空格。
- 函数声明时,参数列表的括号内应包含一个空格,参数之间也应有一个空格。
 
-  数组: - 数组的短语法([])必须用于数组声明。
- 关联数组的键和值之间应有一个空格。
 
- 数组的短语法(
-  对象操作: - 对象操作符(如 ->)之后不应有空白。
 
- 对象操作符(如 
-  方法调用: - 点号(.)之后不应有空白。
 
- 点号(
-  包含和要求: - include、- include_once、- require和- require_once语句后面不应有空白。
 
-  注释: - 注释应使用 /*和*/包围,且注释内容应至少有 1 个空格的缩进。
- 文档注释(DocBlock)应遵循一定的格式。
 
- 注释应使用 
PSR-2 标准通过提供具体的格式和风格指南,帮助开发者编写更加规范和一致的 PHP 代码。遵循 PSR-2 可以减少团队成员之间的代码风格差异,提高代码的可维护性,并使代码审查变得更加容易。许多开发工具和 IDE 都支持 PSR-2 标准的自动格式化,以帮助开发者快速达到这些要求。
PSR-3,是 PHP-FIG 定义的日志记录接口标准
PSR-3 旨在为 PHP 应用程序提供一套统一的日志记录 API,以确保不同的日志系统之间具有一致性和可互换性。以下是 PSR-3 的一些关键点详细介绍:
-  日志级别: - PSR-3 定义了 8 个日志级别,从最低到最高分别为:DEBUG、INFO、NOTICE、WARNING、ERROR、CRITICAL、ALERT和EMERGENCY。
 
- PSR-3 定义了 8 个日志级别,从最低到最高分别为:
-  日志接口: - Psr\Log\LoggerInterface是核心接口,所有日志系统必须实现此接口。它定义了日志记录的基本方法,如- log(),该方法接受两个参数:日志级别和日志消息。
 
-  日志方法: - 除了 log()方法外,PSR-3 还为每个日志级别提供了特定的方法,如debug()、info()、notice()、warning()、error()、critical()、alert()和emergency()。这些方法使得根据日志级别直接记录日志变得更加方便。
 
- 除了 
-  上下文: - 日志消息可以包含一个可选的上下文数组,它提供了与日志消息相关的附加信息。上下文可以包含键值对,用于存储各种元数据。
 
-  处理器: - Psr\Log\ProcessorInterface允许开发者定义额外的日志处理逻辑,如添加时间戳、用户信息等。
 
-  格式化器: - Psr\Log\FormatterInterface定义了日志消息的格式化方式,允许开发者控制日志输出的格式。
 
-  日志记录器: - 一个日志记录器(Logger)是一个实现了 LoggerInterface的对象,它负责接收日志消息并将其传递给一个或多个处理器和/或存储系统。
 
- 一个日志记录器(Logger)是一个实现了 
-  处理器和格式化器的链式操作: - 日志记录器可以连接多个处理器和格式化器,以对日志消息进行预处理和格式化。
 
-  单例模式: - PSR-3 鼓励实现单例模式的日志记录器,以便在整个应用程序中使用统一的日志记录实例。
 
-  兼容性: - PSR-3 定义的日志记录器应该与不同的日志系统兼容,如 Monolog、Zend\Log 等,只要它们实现了 LoggerInterface。
 
- PSR-3 定义的日志记录器应该与不同的日志系统兼容,如 Monolog、Zend\Log 等,只要它们实现了 
PSR-3 的目标是提供一个灵活且一致的日志记录接口,使得开发者可以轻松地在不同的日志系统之间切换,而不需要修改应用程序的日志记录代码。通过遵循 PSR-3,开发者可以确保他们的日志记录代码具有良好的可读性、可维护性和可扩展性。
PSR-4,是 PHP-FIG 提出的一项关于自动加载的规范
它旨在为 PHP 项目中的类文件自动加载提供一个统一的标准,以提高代码的可维护性和可扩展性。以下是 PSR-4 的一些关键点详细介绍:
-  自动加载器接口: - PSR-4 定义了一个 Psr\Autoload\AutoloaderInterface接口,所有遵循 PSR-4 标准的自动加载器都必须实现此接口。
 
- PSR-4 定义了一个 
-  命名空间和类名: - 类的完整命名空间(包括类名)应该直接映射到文件系统的路径。例如,Acme\Demo\Greeting类应该位于Acme/Demo/Greeting.php文件中。
 
- 类的完整命名空间(包括类名)应该直接映射到文件系统的路径。例如,
-  目录结构: - 命名空间通常是目录的名称,而类名对应于文件名。目录结构应该反映命名空间的层级结构。
 
-  自动加载函数: - 遵循 PSR-4 的自动加载器必须实现 loadClass($class)方法,该方法负责将类名转换为文件路径并包含(或 require)相应的文件。
 
- 遵循 PSR-4 的自动加载器必须实现 
-  文件扩展名: - 类文件应该使用 .php作为文件扩展名。
 
- 类文件应该使用 
-  大小写敏感: - PHP 是大小写不敏感的语言,但 PSR-4 规范要求自动加载器应该考虑类名的大小写。这意味着 Acme\Demo\Greeting和acme\demo\greeting应该被视为两个不同的类。
 
- PHP 是大小写不敏感的语言,但 PSR-4 规范要求自动加载器应该考虑类名的大小写。这意味着 
-  性能: - PSR-4 鼓励实现高效的自动加载机制,以减少文件系统操作和提高性能。
 
-  Composer 集成: - PSR-4 与 Composer 的自动加载器紧密集成。Composer 生成的 vendor/autoload.php文件遵循 PSR-4 规范,并可以作为应用程序的自动加载器。
 
- PSR-4 与 Composer 的自动加载器紧密集成。Composer 生成的 
-  命名空间和路径映射: - 开发者可以在 Composer 的 composer.json文件中定义命名空间到文件路径的映射,Composer 将根据这些映射自动配置自动加载器。
 
- 开发者可以在 Composer 的 
-  错误处理: - 如果自动加载器尝试加载一个不存在的类,它应该抛出一个 Psr\Autoload\Exception\InvalidArgumentException异常。
 
- 如果自动加载器尝试加载一个不存在的类,它应该抛出一个 
-  兼容性: - PSR-4 旨在与现有的 PHP 代码库兼容,允许开发者逐步迁移到 PSR-4 规范。
 
PSR-4 的目标是通过提供一个统一的自动加载标准,简化 PHP 项目的依赖管理和代码组织。遵循 PSR-4 可以减少手动包含文件的工作,提高开发效率,并使代码更加模块化和可重用。许多现代 PHP 框架和库都已经遵循 PSR-4 规范,使其成为 PHP 生态系统中的一个重要组成部分。
PSR-7 是 PHP-FIG 定义的一套 HTTP 消息接口标准
它为 PHP 中的 HTTP 请求和响应提供了一套统一的接口,使得不同的框架和库能够更容易地进行互操作。以下是 PSR-7 的一些关键点详细介绍:
-  HTTP 消息接口: - Psr\Http\Message\RequestInterface和- Psr\Http\Message\ResponseInterface是 PSR-7 中定义的两个核心接口,分别代表 HTTP 请求和响应。
 
-  请求接口: - RequestInterface接口定义了获取请求行、请求头、请求体、请求方法、请求目标和查询字符串的方法。
 
-  响应接口: - ResponseInterface接口定义了获取状态码、响应头、响应体和原因短语的方法。
 
-  消息接口: - Psr\Http\Message\MessageInterface是所有 HTTP 消息的通用接口,定义了获取和设置消息头、消息体和协议版本的方法。
 
-  流接口: - Psr\Http\Message\StreamInterface定义了操作消息体的流的方法,如读取、写入、查找位置、返回流大小等。
 
-  URI 接口: - Psr\Http\Message\UriInterface定义了操作 URI 的方法,如获取/设置片段、查询字符串、主机、端口、路径等。
 
-  服务器请求接口: - Psr\Http\Message\ServerRequestInterface扩展了- RequestInterface,添加了获取服务器参数、上传文件、cookie 参数等方法。
 
-  上传文件接口: - Psr\Http\Message\UploadedFileInterface定义了操作上传文件的方法,如获取文件错误、文件名、临时路径、大小和移动到新位置。
 
-  流包装器: - PSR-7 支持多种流包装器,如 Psr\Http\Message\Stream,它可以包装 PHP 资源,实现StreamInterface。
 
- PSR-7 支持多种流包装器,如 
-  实现: - 许多流行的 PHP HTTP 客户端和服务器库,如 Guzzle、Diactoros、Slim 等,都提供了 PSR-7 接口的实现。
 
-  中间件兼容性: - PSR-7 设计为与中间件兼容,允许在应用程序中轻松地添加和使用中间件。
 
-  互操作性: - 由于 PSR-7 提供了统一的 HTTP 消息接口,不同的框架和库可以更容易地交换 HTTP 请求和响应对象。
 
-  异常处理: - PSR-7 定义了 Psr\Http\Message\Exception\InvalidArgumentException,用于在 HTTP 消息处理中抛出参数验证相关的异常。
 
- PSR-7 定义了 
PSR-7 的目标是为 PHP 开发者提供一个统一的、可互操作的 HTTP 消息处理方式,简化 HTTP 客户端和服务器端的实现,并促进不同组件之间的无缝集成。通过遵循 PSR-7,开发者可以编写更加灵活、可重用和可维护的 HTTP 相关代码。
PSR-11,是 PHP-FIG 定义的依赖注入容器接口标准
它为 PHP 应用程序中的依赖注入提供了一套统一的接口,使得不同的容器实现可以更容易地在应用程序中使用和互换。以下是 PSR-11 的一些关键点详细介绍:
-  容器接口: - Psr\Container\ContainerInterface是 PSR-11 的核心接口,定义了容器的基本操作,包括- get($id)和- has($id)方法。
 
-  获取容器条目: - get($id)方法用于从容器中检索服务或对象。如果请求的服务不存在,该方法应抛出- Psr\Container\NotFoundExceptionInterface异常。
 
-  检查容器条目: - has($id)方法用于检查容器是否包含某个服务或对象。
 
-  容器条目标识符: - 容器条目的标识符可以是字符串或完全限定的类名,用于唯一标识容器中的服务或对象。
 
-  异常处理: - 当尝试获取不存在的服务时,容器应抛出 NotFoundExceptionInterface。如果需要,还可以抛出Psr\Container\ContainerExceptionInterface来表示其他类型的容器错误。
 
- 当尝试获取不存在的服务时,容器应抛出 
-  依赖注入: - 容器的主要目的是实现依赖注入,允许应用程序自动解析和提供其组件所需的依赖项。
 
-  容器实现: - 多个流行的 PHP 框架和库提供了 PSR-11 容器接口的实现,如 Symfony 的 DependencyInjection 组件、Laravel 的 Service Container、PHP-DI、Auryn 等。
 
-  自动加载与发现: - 容器可以实现自动加载机制,以自动发现和注册服务,减少手动配置的需要。
 
-  定义和服务提供者: - 容器可以与服务提供者(ServiceProvider)接口结合使用,允许开发者定义一组服务和它们如何被创建。
 
-  扩展性: - PSR-11 容器接口允许容器实现具有高度的扩展性,支持自定义服务解析逻辑、条件注册服务等。
 
-  装饰者模式: - 容器可以支持装饰者模式,允许开发者包装现有服务以添加额外功能,而不影响其他依赖于原始服务的组件。
 
-  复合容器: - 可以通过组合多个容器来创建复合容器,从而实现更复杂的服务解析和提供机制。
 
PSR-11 的目标是为 PHP 应用程序提供一个灵活、可互换的依赖注入容器接口,使得开发者可以轻松地在不同的容器实现之间切换,同时保持应用程序的可维护性和可扩展性。通过遵循 PSR-11,开发者可以编写更加模块化、可测试和可重用的代码。
PSR-12,是 PHP-FIG 提出的一套扩展的编码风格指南。
它在 PSR-2 的基础上进行了扩展,增加了更多的编码风格要求和最佳实践,以进一步提高 PHP 代码的可读性和一致性。以下是 PSR-12 的一些关键点详细介绍:
-  文件编码: - PHP 代码必须使用 UTF-8 编码。
 
-  行长度: - 软性限制:每行代码不应超过 80 个字符。
- 硬性限制:绝对不超过 120 个字符。
 
-  缩进: - 使用 4 个空格进行缩进,不使用制表符(Tab)。
 
-  空格使用: - 在控制结构的关键字后应有一个空格(如 if,foreach,for,while,switch,return)。
- 在函数调用和定义时,参数列表的括号前不应有空格,但括号内的参数之间应有空格分隔。
- 在操作符两侧应有空格,如赋值(=)、比较(==,!=,===,!==)、算术(+,-,*,/)等。
- 在类型声明和函数返回类型之间不应有空格。
 
- 在控制结构的关键字后应有一个空格(如 
-  控制结构: - 控制结构的括号内不应包含空格。
 
-  函数调用和定义: - 函数调用时,参数列表的括号内应包含一个空格,参数之间也应有一个空格。
- 函数定义时,参数列表的括号内不应有空格。
 
-  数组: - 数组的短语法([])必须用于数组声明。
- 关联数组的键和值之间应有一个空格。
 
- 数组的短语法(
-  对象操作: - 对象操作符(如 ->)之后不应有空白。
 
- 对象操作符(如 
-  方法调用: - 点号(.)之后不应有空白。
 
- 点号(
-  包含和要求: - include、- include_once、- require和- require_once语句后面不应有空白。
 
-  命名空间和类: - 命名空间声明必须位于文件顶部,且之前不能有其他代码。
- 类声明必须位于文件顶部,且之前不能有其他代码,除非有注释或使用声明。
 
-  类内结构: - 类的属性和方法之间必须有一个空行。
- 可见性修饰符(如 public、protected、private)在类内部声明时应保持一致的顺序。
 
-  控制结构的关键字: - 控制结构的关键字(如 else、elseif、endif)必须和结束括号在同一行。
 
- 控制结构的关键字(如 
-  函数和常量的可见性: - 如果函数或常量被声明为 public,则它们可以在任何命名空间中使用,而不需要使用global关键字。
 
- 如果函数或常量被声明为 
-  错误处理: - 在错误处理中,@抑制符的使用应限制在特定的情况,如避免破坏性副作用。
 
- 在错误处理中,
-  自动全局变量: - 应避免使用自动全局变量,除非它们是 PHP 保留的或者明确需要。
 
PSR-12 的目标是通过提供一套详细的编码风格指南,帮助开发者编写更加规范、一致的 PHP 代码。遵循 PSR-12 可以减少团队成员之间的代码风格差异,提高代码的可维护性,并使代码审查变得更加容易。许多开发工具和 IDE 都支持 PSR-12 标准的自动格式化,以帮助开发者快速达到这些要求。
PSR-13,是 PHP-FIG 定义的 HTTP 服务器请求处理程序接口标准
它旨在为 PHP 应用程序提供一种统一的方式来处理 HTTP 服务器请求,使得不同的服务器实现能够与 PHP 应用程序进行交互。以下是 PSR-13 的一些关键点详细介绍:
-  HTTP 服务器请求接口: - Psr\Http\Message\ServerRequestInterface是 PSR-7 中定义的接口,用于表示服务器请求。PSR-13 基于这个接口,进一步定义了请求处理程序的行为。
 
-  请求处理器接口: - Psr\Http\Server\RequestHandlerInterface定义了请求处理程序的基本行为,主要包含一个- handle方法,该方法接受一个服务器请求对象并返回一个响应对象。
 
-  中间件接口: - Psr\Http\Server\MiddlewareInterface定义了中间件组件的行为,中间件可以处理请求和响应,并且可以决定是直接返回响应还是将请求传递给下一个中间件或请求处理程序。
 
-  请求处理流程: - 在 PSR-13 中,请求首先通过一个或多个中间件,每个中间件都可以对请求进行处理或修改。如果中间件决定不处理请求,它可以将请求传递给下一个中间件或请求处理程序。
 
-  响应对象: - 处理程序和中间件都必须返回一个 Psr\Http\Message\ResponseInterface对象,表示对客户端的响应。
 
- 处理程序和中间件都必须返回一个 
-  异常处理: - 如果在请求处理过程中发生异常,应该抛出一个实现了 Psr\Http\Server\ExceptionInterface的异常对象。
 
- 如果在请求处理过程中发生异常,应该抛出一个实现了 
-  中间件栈: - 在实际应用中,中间件通常以栈的形式组织,请求从栈顶开始传递,直到达到请求处理程序,然后响应再从处理程序返回给栈顶的中间件。
 
-  请求终止: - 中间件可以通过返回一个响应对象来终止请求的进一步处理,不再将请求传递给下一个中间件或处理程序。
 
-  请求处理程序: - 请求处理程序是请求处理流程的最终接收者,它必须返回一个响应对象,不能将请求传递给其他组件。
 
-  可扩展性: - PSR-13 允许开发者创建自定义中间件和请求处理程序,以适应不同的应用程序需求。
 
-  互操作性: - 遵循 PSR-13 的中间件和请求处理程序可以在不同的服务器实现之间互换使用,提高了应用程序的灵活性和可移植性。
 
PSR-13 的目标是为 PHP 应用程序提供一个统一的请求处理模型,使得开发者可以更容易地编写和集成中间件和请求处理程序。通过遵循 PSR-13,开发者可以构建更加模块化、灵活和可维护的 Web 应用程序。
PSR-14,是 PHP-FIG 定义的事件调度器接口标准
它为 PHP 应用程序中的事件驱动架构提供了一套统一的接口规范,以促进事件的创建、监听、触发和调度。以下是 PSR-14 的一些关键点详细介绍:
-  事件定义: - 事件是应用程序中的一个信号或消息,它表示发生了某些事情,可能需要应用程序做出响应。
 
-  事件接口: - Psr\EventDispatcher\EventInterface定义了事件的基本结构,通常包含事件的类型和相关数据。
 
-  事件监听器接口: - Psr\EventDispatcher\ListenerInterface定义了事件监听器的基本行为,允许监听器表示它们对哪些类型的事件感兴趣。
 
-  事件订阅器接口: - Psr\EventDispatcher\EventSubscriberInterface允许一个类作为多个事件的监听器,并且可以为不同的事件指定不同的处理方法。
 
-  事件调度器接口: - Psr\EventDispatcher\EventDispatcherInterface定义了事件调度器的行为,它负责将事件分派给注册的监听器。
 
-  事件触发: - 应用程序可以在任何时候触发事件,通常在发生重要行为或状态变化时。
 
-  事件监听: - 监听器可以注册到事件调度器上,以便在特定事件发生时接收通知。
 
-  事件处理: - 当事件被触发时,事件调度器会将事件传递给所有注册的监听器,监听器可以对事件进行处理。
 
-  优先级: - 监听器可以指定优先级,以控制它们接收事件的顺序。
 
-  停止传播: - 监听器可以决定是否停止事件的进一步传播,这可以用于中断事件处理链。
 
-  异常处理: - 如果事件处理过程中发生异常,事件调度器应该能够妥善处理这些异常,以避免影响应用程序的其他部分。
 
-  灵活性和扩展性: - PSR-14 允许开发者创建自定义的事件、监听器和调度器,以适应不同的应用程序需求。
 
-  解耦: - 事件驱动架构有助于解耦应用程序的各个部分,因为组件之间的交互是通过事件来进行的,而不是直接调用彼此的方法。
 
-  中间件兼容性: - 事件调度器可以与中间件模式结合使用,以提供更灵活的请求处理流程。
 
PSR-14 的目标是为 PHP 应用程序提供一个统一的事件驱动架构模型,使得开发者可以更容易地实现事件的创建、监听和触发。通过遵循 PSR-14,开发者可以构建更加灵活、可扩展和松耦合的应用程序。许多现代 PHP 框架和库已经实现了 PSR-14 标准,使其成为 PHP 生态系统中的一个重要组成部分。
PSR-15,是 PHP-FIG 定义的 HTTP 中间件接口标准
它为 PHP 应用程序中的 HTTP 请求和响应处理提供了一套统一的中间件接口,使得不同的中间件实现可以在应用程序中方便地使用和组合。以下是 PSR-15 的一些关键点详细介绍:
-  中间件接口: - Psr\Http\Server\MiddlewareInterface定义了中间件的基本行为,主要包含一个- process方法。这个方法接受一个服务器请求对象和一个请求处理程序的引用,并返回一个响应对象。
 
-  请求处理程序接口: - Psr\Http\Server\RequestHandlerInterface定义了请求处理程序的基本行为,包含一个- handle方法,该方法接受一个服务器请求对象并返回一个响应对象。
 
-  请求和响应: - 中间件和请求处理程序在处理 HTTP 请求和响应时,应使用 PSR-7 定义的 ServerRequestInterface和ResponseInterface接口。
 
- 中间件和请求处理程序在处理 HTTP 请求和响应时,应使用 PSR-7 定义的 
-  请求处理流程: - 在 PSR-15 中,请求首先通过一个或多个中间件,每个中间件都可以对请求进行处理或修改。如果中间件决定不处理请求,它可以将请求传递给下一个中间件或请求处理程序。
 
-  终止请求处理: - 中间件可以通过返回一个响应对象来终止请求的进一步处理,不再将请求传递给下一个中间件或处理程序。
 
-  请求传递: - 如果中间件决定将请求传递给下一个组件,它应该调用请求处理程序的 handle方法,并返回其结果。
 
- 如果中间件决定将请求传递给下一个组件,它应该调用请求处理程序的 
-  异常处理: - 如果在中间件处理过程中发生异常,应该抛出一个实现了 Psr\Http\Server\ExceptionInterface的异常对象。
 
- 如果在中间件处理过程中发生异常,应该抛出一个实现了 
-  中间件栈: - 在实际应用中,中间件通常以栈的形式组织,请求从栈顶开始传递,直到达到请求处理程序,然后响应再从处理程序返回给栈顶的中间件。
 
-  可扩展性: - PSR-15 允许开发者创建自定义中间件,以适应不同的应用程序需求。
 
-  互操作性: - 遵循 PSR-15 的中间件可以在不同的服务器实现和应用程序之间互换使用,提高了应用程序的灵活性和可移植性。
 
-  中间件的组合: - 开发者可以将多个中间件组合起来,以构建复杂的请求处理流程。
 
-  中间件的顺序: - 中间件的执行顺序很重要,因为每个中间件都可能对请求或响应进行修改。
 
PSR-15 的目标是为 PHP 应用程序提供一个统一的 HTTP 中间件模型,使得开发者可以更容易地编写和集成中间件。通过遵循 PSR-15,开发者可以构建更加模块化、灵活和可维护的 Web 应用程序。许多现代 PHP 框架和库已经实现了 PSR-15 标准,使其成为 PHP 生态系统中的一个重要组成部分。
PSR-16,是 PHP-FIG 定义的简单缓存接口标准
它旨在为 PHP 应用程序提供一个统一的简单缓存机制,以便以一种一致和简单的方式存储和检索缓存数据。以下是 PSR-16 的一些关键点详细介绍:
-  缓存接口: - Psr\SimpleCache\CacheInterface定义了简单缓存的基本操作,包括- get、- set、- delete和- has方法。
 
-  获取缓存数据: - get($key, $default = null)方法用于从缓存中获取数据。如果缓存项不存在,可以返回一个默认值。
 
-  设置缓存数据: - set($key, $value, $ttl = null)方法用于将数据存储到缓存中。- $ttl参数(生存时间)指定了缓存项的有效期(以秒为单位)。如果- $ttl为- null,则缓存项可以无限期地存储,直到被明确删除或缓存被清除。
 
-  删除缓存数据: - delete($key)方法用于从缓存中删除一个条目。
 
-  检查缓存数据: - has($key)方法用于检查缓存中是否存在某个键的条目。
 
-  多键操作: - 除了单个键的操作,PSR-16 还定义了 getMultiple、setMultiple和deleteMultiple方法,允许对多个键进行批量操作。
 
- 除了单个键的操作,PSR-16 还定义了 
-  多键检查: - hasMultiple($keys)方法用于检查多个键是否存在于缓存中,并返回一个布尔值数组,表示每个键是否存在。
 
-  清除缓存: - clear()方法用于清除所有缓存条目。注意,这个方法不是在所有缓存实现中都可用。
 
-  缓存池标签: - 一些缓存实现可能支持缓存池标签的概念,允许开发者对缓存池进行分组和标记。
 
-  异常处理: - 在缓存操作过程中,如果发生错误,应该抛出实现了 Psr\SimpleCache\CacheExceptionInterface的异常对象。
 
- 在缓存操作过程中,如果发生错误,应该抛出实现了 
-  互操作性: - 遵循 PSR-16 的缓存实现可以在不同的应用程序和框架之间互换使用,提高了应用程序的灵活性和可移植性。
 
-  简单性: - PSR-16 的目的是提供一个简单直观的缓存接口,适用于不需要复杂缓存策略的场景。
 
PSR-16 的目标是为 PHP 应用程序提供一个轻量级的缓存解决方案,使得开发者可以轻松地实现数据的缓存和检索。通过遵循 PSR-16,开发者可以编写更加模块化、可测试和可重用的代码,同时保持应用程序的性能和响应速度。许多现代 PHP 框架和库已经实现了 PSR-16 标准,使其成为 PHP 生态系统中的一个重要组成部分。