PHP Standard Recommendations 详细介绍

Profinet从站开发初体验:用p-net开源库和树莓派快速搭建一个IO设备模拟器 本文详细介绍了如何使用p-net开源库和树莓派快速搭建Profinet从站IO设备模拟器。从开发环境准备、p-net源码编译到设备模拟器功能实现,提供了全流程实战指南,帮助开发者快速掌握工业通信协议开发技巧,适用于工业自动化领域的设备互联测试与验证。 阅读详情

目录

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 的几个关键点详细介绍:

  1. 文件编码:

    • PHP 代码必须使用 UTF-8 编码。
  2. 文件扩展名:

    • PHP 文件必须使用 .php 扩展名。
  3. Shebang 行:

    • 如果 PHP 文件被设计为从命令行执行,第一行应该是一个 shebang 行,例如 #!/usr/bin/env php。这行应该被放在文件的最开始,即使文件是通过 Web 服务器访问的。
  4. __halt_compiler() 函数:

    • 不推荐使用 __HALT_COMPILER(); 如果使用,它必须放在文件末尾,并且是最后一行。
  5. 命名空间和类:

    • 每个 PHP 文件应该声明一个且只有一个命名空间和类。
    • 类名必须使用 StudlyCaps(类似于驼峰命名法,但首字母大写)。
  6. 类常量、属性和方法:

    • 类中的常量命名应该全部大写,下划线分隔。
    • 属性命名应该遵循 camelCase 规则,即第一个单词小写,后续单词首字母大写。
    • 方法命名也应该遵循 camelCase 规则。
  7. 控制结构:

    • 控制结构(如 if、else、while、for、foreach)的语法必须遵守一定的格式,例如使用大括号 {} 包围代码块,即使它们是单行表达式。
  8. 控制结构的关键字:

    • 控制结构的关键字(如 else、elseif、endif)必须和结束括号在同一行。
  9. 函数调用:

    • 函数调用时,参数列表应该在函数名之后立即开始,并且每个参数应该在新的一行,除非它们很短并且可以放在一行内。
  10. 自动全局变量:

    • 应该避免使用自动全局变量,除非它们是 PHP 保留的或者明确需要。

PSR-1 的目标是提高 PHP 代码的可读性和一致性,使得不同开发者编写的代码风格统一,便于团队协作和代码维护。遵循 PSR-1 标准是编写高质量 PHP 代码的良好起点,并且可以作为更严格编码标准(如 PSR-2 和 PSR-12)的基础。

PSR-2 ,它在 PSR-1 的基础上提供了更详细的编码风格指南

PSR-2 的目的是统一 PHP 代码的格式,使代码更加易读和一致。以下是 PSR-2 的一些关键点详细介绍:

  1. 文件格式:

    • PHP 代码必须使用 UTF-8 编码。
    • 文件必须以一个空行结束。
  2. 行长度:

    • 软性限制:每行代码不应超过 80 个字符。
    • 硬性限制:绝对不超过 120 个字符。
  3. 缩进:

    • 使用 4 个空格进行缩进,不使用制表符(Tab)。
  4. 空白:

    • 在 PHP 开始标签 <?php 之后必须有一个空行。
    • 在 PHP 结束标签 ?> 之前必须有一个空行,除非文件以 PHP 结束标签结束。
    • 在命名空间声明之前必须有一个空行。
  5. 命名空间和类:

    • 命名空间声明必须位于文件顶部,且之前不能有其他代码。
    • 类声明必须位于文件顶部,且之前不能有其他代码,除非有注释或使用声明。
  6. 类内结构:

    • 类的属性和方法之间必须有一个空行。
    • 可见性修饰符(如 public、protected、private)在类内部声明时应保持一致的顺序。
  7. 控制结构:

    • 控制结构的关键字(如 if、else、elseif、switch、case、default、for、foreach、while、do、while、try、catch、finally)后面必须有一个空格。
    • 控制结构的括号内不应包含空格。
  8. 函数调用和声明:

    • 函数调用时,参数列表的括号内不应包含空格。
    • 函数声明时,参数列表的括号内应包含一个空格,参数之间也应有一个空格。
  9. 数组:

    • 数组的短语法([])必须用于数组声明。
    • 关联数组的键和值之间应有一个空格。
  10. 对象操作:

    • 对象操作符(如 ->)之后不应有空白。
  11. 方法调用:

    • 点号(.)之后不应有空白。
  12. 包含和要求:

    • include、include_once、require 和 require_once 语句后面不应有空白。
  13. 注释:

    • 注释应使用 /* 和 */ 包围,且注释内容应至少有 1 个空格的缩进。
    • 文档注释(DocBlock)应遵循一定的格式。

PSR-2 标准通过提供具体的格式和风格指南,帮助开发者编写更加规范和一致的 PHP 代码。遵循 PSR-2 可以减少团队成员之间的代码风格差异,提高代码的可维护性,并使代码审查变得更加容易。许多开发工具和 IDE 都支持 PSR-2 标准的自动格式化,以帮助开发者快速达到这些要求。

PSR-3,是 PHP-FIG 定义的日志记录接口标准

PSR-3 旨在为 PHP 应用程序提供一套统一的日志记录 API,以确保不同的日志系统之间具有一致性和可互换性。以下是 PSR-3 的一些关键点详细介绍:

  1. 日志级别:

    • PSR-3 定义了 8 个日志级别,从最低到最高分别为:DEBUG、INFO、NOTICE、WARNING、ERROR、CRITICAL、ALERT 和 EMERGENCY。
  2. 日志接口:

    • Psr\Log\LoggerInterface 是核心接口,所有日志系统必须实现此接口。它定义了日志记录的基本方法,如 log(),该方法接受两个参数:日志级别和日志消息。
  3. 日志方法:

    • 除了 log() 方法外,PSR-3 还为每个日志级别提供了特定的方法,如 debug()、info()、notice()、warning()、error()、critical()、alert() 和 emergency()。这些方法使得根据日志级别直接记录日志变得更加方便。
  4. 上下文:

    • 日志消息可以包含一个可选的上下文数组,它提供了与日志消息相关的附加信息。上下文可以包含键值对,用于存储各种元数据。
  5. 处理器:

    • Psr\Log\ProcessorInterface 允许开发者定义额外的日志处理逻辑,如添加时间戳、用户信息等。
  6. 格式化器:

    • Psr\Log\FormatterInterface 定义了日志消息的格式化方式,允许开发者控制日志输出的格式。
  7. 日志记录器:

    • 一个日志记录器(Logger)是一个实现了 LoggerInterface 的对象,它负责接收日志消息并将其传递给一个或多个处理器和/或存储系统。
  8. 处理器和格式化器的链式操作:

    • 日志记录器可以连接多个处理器和格式化器,以对日志消息进行预处理和格式化。
  9. 单例模式:

    • PSR-3 鼓励实现单例模式的日志记录器,以便在整个应用程序中使用统一的日志记录实例。
  10. 兼容性:

    • PSR-3 定义的日志记录器应该与不同的日志系统兼容,如 Monolog、Zend\Log 等,只要它们实现了 LoggerInterface。

PSR-3 的目标是提供一个灵活且一致的日志记录接口,使得开发者可以轻松地在不同的日志系统之间切换,而不需要修改应用程序的日志记录代码。通过遵循 PSR-3,开发者可以确保他们的日志记录代码具有良好的可读性、可维护性和可扩展性。

PSR-4,是 PHP-FIG 提出的一项关于自动加载的规范

它旨在为 PHP 项目中的类文件自动加载提供一个统一的标准,以提高代码的可维护性和可扩展性。以下是 PSR-4 的一些关键点详细介绍:

  1. 自动加载器接口:

    • PSR-4 定义了一个 Psr\Autoload\AutoloaderInterface 接口,所有遵循 PSR-4 标准的自动加载器都必须实现此接口。
  2. 命名空间和类名:

    • 类的完整命名空间(包括类名)应该直接映射到文件系统的路径。例如,Acme\Demo\Greeting 类应该位于 Acme/Demo/Greeting.php 文件中。
  3. 目录结构:

    • 命名空间通常是目录的名称,而类名对应于文件名。目录结构应该反映命名空间的层级结构。
  4. 自动加载函数:

    • 遵循 PSR-4 的自动加载器必须实现 loadClass($class) 方法,该方法负责将类名转换为文件路径并包含(或 require)相应的文件。
  5. 文件扩展名:

    • 类文件应该使用 .php 作为文件扩展名。
  6. 大小写敏感:

    • PHP 是大小写不敏感的语言,但 PSR-4 规范要求自动加载器应该考虑类名的大小写。这意味着 Acme\Demo\Greeting 和 acme\demo\greeting 应该被视为两个不同的类。
  7. 性能:

    • PSR-4 鼓励实现高效的自动加载机制,以减少文件系统操作和提高性能。
  8. Composer 集成:

    • PSR-4 与 Composer 的自动加载器紧密集成。Composer 生成的 vendor/autoload.php 文件遵循 PSR-4 规范,并可以作为应用程序的自动加载器。
  9. 命名空间和路径映射:

    • 开发者可以在 Composer 的 composer.json 文件中定义命名空间到文件路径的映射,Composer 将根据这些映射自动配置自动加载器。
  10. 错误处理:

    • 如果自动加载器尝试加载一个不存在的类,它应该抛出一个 Psr\Autoload\Exception\InvalidArgumentException 异常。
  11. 兼容性:

    • PSR-4 旨在与现有的 PHP 代码库兼容,允许开发者逐步迁移到 PSR-4 规范。

PSR-4 的目标是通过提供一个统一的自动加载标准,简化 PHP 项目的依赖管理和代码组织。遵循 PSR-4 可以减少手动包含文件的工作,提高开发效率,并使代码更加模块化和可重用。许多现代 PHP 框架和库都已经遵循 PSR-4 规范,使其成为 PHP 生态系统中的一个重要组成部分。

PSR-7 是 PHP-FIG 定义的一套 HTTP 消息接口标准

它为 PHP 中的 HTTP 请求和响应提供了一套统一的接口,使得不同的框架和库能够更容易地进行互操作。以下是 PSR-7 的一些关键点详细介绍:

  1. HTTP 消息接口:

    • Psr\Http\Message\RequestInterface 和 Psr\Http\Message\ResponseInterface 是 PSR-7 中定义的两个核心接口,分别代表 HTTP 请求和响应。
  2. 请求接口:

    • RequestInterface 接口定义了获取请求行、请求头、请求体、请求方法、请求目标和查询字符串的方法。
  3. 响应接口:

    • ResponseInterface 接口定义了获取状态码、响应头、响应体和原因短语的方法。
  4. 消息接口:

    • Psr\Http\Message\MessageInterface 是所有 HTTP 消息的通用接口,定义了获取和设置消息头、消息体和协议版本的方法。
  5. 流接口:

    • Psr\Http\Message\StreamInterface 定义了操作消息体的流的方法,如读取、写入、查找位置、返回流大小等。
  6. URI 接口:

    • Psr\Http\Message\UriInterface 定义了操作 URI 的方法,如获取/设置片段、查询字符串、主机、端口、路径等。
  7. 服务器请求接口:

    • Psr\Http\Message\ServerRequestInterface 扩展了 RequestInterface,添加了获取服务器参数、上传文件、cookie 参数等方法。
  8. 上传文件接口:

    • Psr\Http\Message\UploadedFileInterface 定义了操作上传文件的方法,如获取文件错误、文件名、临时路径、大小和移动到新位置。
  9. 流包装器:

    • PSR-7 支持多种流包装器,如 Psr\Http\Message\Stream,它可以包装 PHP 资源,实现 StreamInterface。
  10. 实现:

    • 许多流行的 PHP HTTP 客户端和服务器库,如 Guzzle、Diactoros、Slim 等,都提供了 PSR-7 接口的实现。
  11. 中间件兼容性:

    • PSR-7 设计为与中间件兼容,允许在应用程序中轻松地添加和使用中间件。
  12. 互操作性:

    • 由于 PSR-7 提供了统一的 HTTP 消息接口,不同的框架和库可以更容易地交换 HTTP 请求和响应对象。
  13. 异常处理:

    • PSR-7 定义了 Psr\Http\Message\Exception\InvalidArgumentException,用于在 HTTP 消息处理中抛出参数验证相关的异常。

PSR-7 的目标是为 PHP 开发者提供一个统一的、可互操作的 HTTP 消息处理方式,简化 HTTP 客户端和服务器端的实现,并促进不同组件之间的无缝集成。通过遵循 PSR-7,开发者可以编写更加灵活、可重用和可维护的 HTTP 相关代码。

PSR-11,是 PHP-FIG 定义的依赖注入容器接口标准

它为 PHP 应用程序中的依赖注入提供了一套统一的接口,使得不同的容器实现可以更容易地在应用程序中使用和互换。以下是 PSR-11 的一些关键点详细介绍:

  1. 容器接口:

    • Psr\Container\ContainerInterface 是 PSR-11 的核心接口,定义了容器的基本操作,包括 get($id) 和 has($id) 方法。
  2. 获取容器条目:

    • get($id) 方法用于从容器中检索服务或对象。如果请求的服务不存在,该方法应抛出 Psr\Container\NotFoundExceptionInterface 异常。
  3. 检查容器条目:

    • has($id) 方法用于检查容器是否包含某个服务或对象。
  4. 容器条目标识符:

    • 容器条目的标识符可以是字符串或完全限定的类名,用于唯一标识容器中的服务或对象。
  5. 异常处理:

    • 当尝试获取不存在的服务时,容器应抛出 NotFoundExceptionInterface。如果需要,还可以抛出 Psr\Container\ContainerExceptionInterface 来表示其他类型的容器错误。
  6. 依赖注入:

    • 容器的主要目的是实现依赖注入,允许应用程序自动解析和提供其组件所需的依赖项。
  7. 容器实现:

    • 多个流行的 PHP 框架和库提供了 PSR-11 容器接口的实现,如 Symfony 的 DependencyInjection 组件、Laravel 的 Service Container、PHP-DI、Auryn 等。
  8. 自动加载与发现:

    • 容器可以实现自动加载机制,以自动发现和注册服务,减少手动配置的需要。
  9. 定义和服务提供者:

    • 容器可以与服务提供者(ServiceProvider)接口结合使用,允许开发者定义一组服务和它们如何被创建。
  10. 扩展性:

    • PSR-11 容器接口允许容器实现具有高度的扩展性,支持自定义服务解析逻辑、条件注册服务等。
  11. 装饰者模式:

    • 容器可以支持装饰者模式,允许开发者包装现有服务以添加额外功能,而不影响其他依赖于原始服务的组件。
  12. 复合容器:

    • 可以通过组合多个容器来创建复合容器,从而实现更复杂的服务解析和提供机制。

PSR-11 的目标是为 PHP 应用程序提供一个灵活、可互换的依赖注入容器接口,使得开发者可以轻松地在不同的容器实现之间切换,同时保持应用程序的可维护性和可扩展性。通过遵循 PSR-11,开发者可以编写更加模块化、可测试和可重用的代码。

PSR-12,是 PHP-FIG 提出的一套扩展的编码风格指南。

它在 PSR-2 的基础上进行了扩展,增加了更多的编码风格要求和最佳实践,以进一步提高 PHP 代码的可读性和一致性。以下是 PSR-12 的一些关键点详细介绍:

  1. 文件编码:

    • PHP 代码必须使用 UTF-8 编码。
  2. 行长度:

    • 软性限制:每行代码不应超过 80 个字符。
    • 硬性限制:绝对不超过 120 个字符。
  3. 缩进:

    • 使用 4 个空格进行缩进,不使用制表符(Tab)。
  4. 空格使用:

    • 在控制结构的关键字后应有一个空格(如 if, foreach, for, while, switch, return)。
    • 在函数调用和定义时,参数列表的括号前不应有空格,但括号内的参数之间应有空格分隔。
    • 在操作符两侧应有空格,如赋值(=)、比较(==, !=, ===, !==)、算术(+, -, *, /)等。
    • 在类型声明和函数返回类型之间不应有空格。
  5. 控制结构:

    • 控制结构的括号内不应包含空格。
  6. 函数调用和定义:

    • 函数调用时,参数列表的括号内应包含一个空格,参数之间也应有一个空格。
    • 函数定义时,参数列表的括号内不应有空格。
  7. 数组:

    • 数组的短语法([])必须用于数组声明。
    • 关联数组的键和值之间应有一个空格。
  8. 对象操作:

    • 对象操作符(如 ->)之后不应有空白。
  9. 方法调用:

    • 点号(.)之后不应有空白。
  10. 包含和要求:

    • include、include_once、require 和 require_once 语句后面不应有空白。
  11. 命名空间和类:

    • 命名空间声明必须位于文件顶部,且之前不能有其他代码。
    • 类声明必须位于文件顶部,且之前不能有其他代码,除非有注释或使用声明。
  12. 类内结构:

    • 类的属性和方法之间必须有一个空行。
    • 可见性修饰符(如 public、protected、private)在类内部声明时应保持一致的顺序。
  13. 控制结构的关键字:

    • 控制结构的关键字(如 else、elseif、endif)必须和结束括号在同一行。
  14. 函数和常量的可见性:

    • 如果函数或常量被声明为 public,则它们可以在任何命名空间中使用,而不需要使用 global 关键字。
  15. 错误处理:

    • 在错误处理中,@ 抑制符的使用应限制在特定的情况,如避免破坏性副作用。
  16. 自动全局变量:

    • 应避免使用自动全局变量,除非它们是 PHP 保留的或者明确需要。

PSR-12 的目标是通过提供一套详细的编码风格指南,帮助开发者编写更加规范、一致的 PHP 代码。遵循 PSR-12 可以减少团队成员之间的代码风格差异,提高代码的可维护性,并使代码审查变得更加容易。许多开发工具和 IDE 都支持 PSR-12 标准的自动格式化,以帮助开发者快速达到这些要求。

PSR-13,是 PHP-FIG 定义的 HTTP 服务器请求处理程序接口标准

它旨在为 PHP 应用程序提供一种统一的方式来处理 HTTP 服务器请求,使得不同的服务器实现能够与 PHP 应用程序进行交互。以下是 PSR-13 的一些关键点详细介绍:

  1. HTTP 服务器请求接口:

    • Psr\Http\Message\ServerRequestInterface 是 PSR-7 中定义的接口,用于表示服务器请求。PSR-13 基于这个接口,进一步定义了请求处理程序的行为。
  2. 请求处理器接口:

    • Psr\Http\Server\RequestHandlerInterface 定义了请求处理程序的基本行为,主要包含一个 handle 方法,该方法接受一个服务器请求对象并返回一个响应对象。
  3. 中间件接口:

    • Psr\Http\Server\MiddlewareInterface 定义了中间件组件的行为,中间件可以处理请求和响应,并且可以决定是直接返回响应还是将请求传递给下一个中间件或请求处理程序。
  4. 请求处理流程:

    • 在 PSR-13 中,请求首先通过一个或多个中间件,每个中间件都可以对请求进行处理或修改。如果中间件决定不处理请求,它可以将请求传递给下一个中间件或请求处理程序。
  5. 响应对象:

    • 处理程序和中间件都必须返回一个 Psr\Http\Message\ResponseInterface 对象,表示对客户端的响应。
  6. 异常处理:

    • 如果在请求处理过程中发生异常,应该抛出一个实现了 Psr\Http\Server\ExceptionInterface 的异常对象。
  7. 中间件栈:

    • 在实际应用中,中间件通常以栈的形式组织,请求从栈顶开始传递,直到达到请求处理程序,然后响应再从处理程序返回给栈顶的中间件。
  8. 请求终止:

    • 中间件可以通过返回一个响应对象来终止请求的进一步处理,不再将请求传递给下一个中间件或处理程序。
  9. 请求处理程序:

    • 请求处理程序是请求处理流程的最终接收者,它必须返回一个响应对象,不能将请求传递给其他组件。
  10. 可扩展性:

    • PSR-13 允许开发者创建自定义中间件和请求处理程序,以适应不同的应用程序需求。
  11. 互操作性:

    • 遵循 PSR-13 的中间件和请求处理程序可以在不同的服务器实现之间互换使用,提高了应用程序的灵活性和可移植性。

PSR-13 的目标是为 PHP 应用程序提供一个统一的请求处理模型,使得开发者可以更容易地编写和集成中间件和请求处理程序。通过遵循 PSR-13,开发者可以构建更加模块化、灵活和可维护的 Web 应用程序。

PSR-14,是 PHP-FIG 定义的事件调度器接口标准

它为 PHP 应用程序中的事件驱动架构提供了一套统一的接口规范,以促进事件的创建、监听、触发和调度。以下是 PSR-14 的一些关键点详细介绍:

  1. 事件定义:

    • 事件是应用程序中的一个信号或消息,它表示发生了某些事情,可能需要应用程序做出响应。
  2. 事件接口:

    • Psr\EventDispatcher\EventInterface 定义了事件的基本结构,通常包含事件的类型和相关数据。
  3. 事件监听器接口:

    • Psr\EventDispatcher\ListenerInterface 定义了事件监听器的基本行为,允许监听器表示它们对哪些类型的事件感兴趣。
  4. 事件订阅器接口:

    • Psr\EventDispatcher\EventSubscriberInterface 允许一个类作为多个事件的监听器,并且可以为不同的事件指定不同的处理方法。
  5. 事件调度器接口:

    • Psr\EventDispatcher\EventDispatcherInterface 定义了事件调度器的行为,它负责将事件分派给注册的监听器。
  6. 事件触发:

    • 应用程序可以在任何时候触发事件,通常在发生重要行为或状态变化时。
  7. 事件监听:

    • 监听器可以注册到事件调度器上,以便在特定事件发生时接收通知。
  8. 事件处理:

    • 当事件被触发时,事件调度器会将事件传递给所有注册的监听器,监听器可以对事件进行处理。
  9. 优先级:

    • 监听器可以指定优先级,以控制它们接收事件的顺序。
  10. 停止传播:

    • 监听器可以决定是否停止事件的进一步传播,这可以用于中断事件处理链。
  11. 异常处理:

    • 如果事件处理过程中发生异常,事件调度器应该能够妥善处理这些异常,以避免影响应用程序的其他部分。
  12. 灵活性和扩展性:

    • PSR-14 允许开发者创建自定义的事件、监听器和调度器,以适应不同的应用程序需求。
  13. 解耦:

    • 事件驱动架构有助于解耦应用程序的各个部分,因为组件之间的交互是通过事件来进行的,而不是直接调用彼此的方法。
  14. 中间件兼容性:

    • 事件调度器可以与中间件模式结合使用,以提供更灵活的请求处理流程。

PSR-14 的目标是为 PHP 应用程序提供一个统一的事件驱动架构模型,使得开发者可以更容易地实现事件的创建、监听和触发。通过遵循 PSR-14,开发者可以构建更加灵活、可扩展和松耦合的应用程序。许多现代 PHP 框架和库已经实现了 PSR-14 标准,使其成为 PHP 生态系统中的一个重要组成部分。

PSR-15,是 PHP-FIG 定义的 HTTP 中间件接口标准

它为 PHP 应用程序中的 HTTP 请求和响应处理提供了一套统一的中间件接口,使得不同的中间件实现可以在应用程序中方便地使用和组合。以下是 PSR-15 的一些关键点详细介绍:

  1. 中间件接口:

    • Psr\Http\Server\MiddlewareInterface 定义了中间件的基本行为,主要包含一个 process 方法。这个方法接受一个服务器请求对象和一个请求处理程序的引用,并返回一个响应对象。
  2. 请求处理程序接口:

    • Psr\Http\Server\RequestHandlerInterface 定义了请求处理程序的基本行为,包含一个 handle 方法,该方法接受一个服务器请求对象并返回一个响应对象。
  3. 请求和响应:

    • 中间件和请求处理程序在处理 HTTP 请求和响应时,应使用 PSR-7 定义的 ServerRequestInterface 和 ResponseInterface 接口。
  4. 请求处理流程:

    • 在 PSR-15 中,请求首先通过一个或多个中间件,每个中间件都可以对请求进行处理或修改。如果中间件决定不处理请求,它可以将请求传递给下一个中间件或请求处理程序。
  5. 终止请求处理:

    • 中间件可以通过返回一个响应对象来终止请求的进一步处理,不再将请求传递给下一个中间件或处理程序。
  6. 请求传递:

    • 如果中间件决定将请求传递给下一个组件,它应该调用请求处理程序的 handle 方法,并返回其结果。
  7. 异常处理:

    • 如果在中间件处理过程中发生异常,应该抛出一个实现了 Psr\Http\Server\ExceptionInterface 的异常对象。
  8. 中间件栈:

    • 在实际应用中,中间件通常以栈的形式组织,请求从栈顶开始传递,直到达到请求处理程序,然后响应再从处理程序返回给栈顶的中间件。
  9. 可扩展性:

    • PSR-15 允许开发者创建自定义中间件,以适应不同的应用程序需求。
  10. 互操作性:

    • 遵循 PSR-15 的中间件可以在不同的服务器实现和应用程序之间互换使用,提高了应用程序的灵活性和可移植性。
  11. 中间件的组合:

    • 开发者可以将多个中间件组合起来,以构建复杂的请求处理流程。
  12. 中间件的顺序:

    • 中间件的执行顺序很重要,因为每个中间件都可能对请求或响应进行修改。

PSR-15 的目标是为 PHP 应用程序提供一个统一的 HTTP 中间件模型,使得开发者可以更容易地编写和集成中间件。通过遵循 PSR-15,开发者可以构建更加模块化、灵活和可维护的 Web 应用程序。许多现代 PHP 框架和库已经实现了 PSR-15 标准,使其成为 PHP 生态系统中的一个重要组成部分。

PSR-16,是 PHP-FIG 定义的简单缓存接口标准

它旨在为 PHP 应用程序提供一个统一的简单缓存机制,以便以一种一致和简单的方式存储和检索缓存数据。以下是 PSR-16 的一些关键点详细介绍:

  1. 缓存接口:

    • Psr\SimpleCache\CacheInterface 定义了简单缓存的基本操作,包括 get、set、delete 和 has 方法。
  2. 获取缓存数据:

    • get($key, $default = null) 方法用于从缓存中获取数据。如果缓存项不存在,可以返回一个默认值。
  3. 设置缓存数据:

    • set($key, $value, $ttl = null) 方法用于将数据存储到缓存中。$ttl 参数(生存时间)指定了缓存项的有效期(以秒为单位)。如果 $ttl 为 null,则缓存项可以无限期地存储,直到被明确删除或缓存被清除。
  4. 删除缓存数据:

    • delete($key) 方法用于从缓存中删除一个条目。
  5. 检查缓存数据:

    • has($key) 方法用于检查缓存中是否存在某个键的条目。
  6. 多键操作:

    • 除了单个键的操作,PSR-16 还定义了 getMultiple、setMultiple 和 deleteMultiple 方法,允许对多个键进行批量操作。
  7. 多键检查:

    • hasMultiple($keys) 方法用于检查多个键是否存在于缓存中,并返回一个布尔值数组,表示每个键是否存在。
  8. 清除缓存:

    • clear() 方法用于清除所有缓存条目。注意,这个方法不是在所有缓存实现中都可用。
  9. 缓存池标签:

    • 一些缓存实现可能支持缓存池标签的概念,允许开发者对缓存池进行分组和标记。
  10. 异常处理:

    • 在缓存操作过程中,如果发生错误,应该抛出实现了 Psr\SimpleCache\CacheExceptionInterface 的异常对象。
  11. 互操作性:

    • 遵循 PSR-16 的缓存实现可以在不同的应用程序和框架之间互换使用,提高了应用程序的灵活性和可移植性。
  12. 简单性:

    • PSR-16 的目的是提供一个简单直观的缓存接口,适用于不需要复杂缓存策略的场景。

PSR-16 的目标是为 PHP 应用程序提供一个轻量级的缓存解决方案,使得开发者可以轻松地实现数据的缓存和检索。通过遵循 PSR-16,开发者可以编写更加模块化、可测试和可重用的代码,同时保持应用程序的性能和响应速度。许多现代 PHP 框架和库已经实现了 PSR-16 标准,使其成为 PHP 生态系统中的一个重要组成部分。

深入解析BlueZ5与D-Bus:Linux蓝牙开发实战指南 本文深入解析BlueZ5与D-Bus在Linux蓝牙开发中的核心应用,提供从环境搭建到实战开发的完整指南。通过详细代码示例和调试技巧,帮助开发者掌握蓝牙协议栈与D-Bus接口的交互方法,实现高效蓝牙设备管理与GATT服务开发。 阅读详情

相关推荐

Stata实战:DID平行趋势检验完整操作指南(附reghdfe+coefplot代码)

本文提供了一份使用Stata进行DID平行趋势检验的完整实战指南。文章详细讲解了从数据准备、生成相对时间变量,到利用reghdfe命令构建动态效应模型,以及使用coefplot命令进行结果可视化的全流程操作。核心在于通过检验政策前交互项的显著性,验证处理组与对照组是否满足平行趋势假设,为后续因果推断奠定可靠基础。

weixin_29231725的博客 1380

PHP 基于 psr-15 的中间件和请求处理

0. 准备 新建 /path/to/your/project 目录,在此目录中创建 composer.json 并写入以下内容: { "require": { "psr/http-server-handler": "^1.0", "psr/http-server-middleware": "^1.0", "slim/psr7": "^1.4" }, "autoload": { "psr-4": {

weixin_40369062的博客 733

Unity安卓打包实战:SDK与JDK配置全攻略

本文详细介绍了Unity安卓打包过程中SDK与JDK的配置方法,包括工具下载、安装步骤、环境变量设置及常见错误排查。通过实战指南帮助开发者快速完成Unity安卓打包环境搭建,提升开发效率。

weixin_30338481的博客 415

PHP 标准库(Standard PHP Library)

学习php标准库,其实我也不太懂,写博客也或许是cv,只是为了记笔记方便后续查看。

qq_43766528的博客 595

命令行驱动视频剪辑:cutcli与AI自动化工作流实战

在视频内容创作领域,自动化与批量化处理是提升生产效率的关键。传统图形界面工具在应对重复性任务时往往效率低下,而通过命令行接口(CLI)驱动视频生成,则能实现流程的程序化控制。其技术原理在于将视频结构抽象为可编程的指令序列,通过解析命令生成标准化的工程文件。这种模式的核心价值在于将视频制作从手动操作转变为代码驱动,特别适合与AI编程助手集成,实现自然语言到视频草稿的自动转换。应用场景广泛覆盖社交媒体内容批量生产、教育视频自动化生成、数据可视化视频组装等领域。本文以cutcli工具为例,深入解析如何通过命令行与

weixin_42520239的博客 576

台式机ubuntu系统屏幕无法调节的问题(已解决)(汇总)

背景:新配了一台主机,安装了双系统,windows下屏幕在带鱼屏上显示良好,但Ubuntu系统屏幕拉伸严重。 问题描述:系统没有适应屏幕被整个拉伸了,进入设置界面,显示Built-in Display,分辨率只有1024*768无法设置。 尝试一:网上最多的方法就是使用xrandr, 结果显示:xrandr:Failed to get size of gamma for output default 尝试二: 第一次进入命令行页面:login:填你的用户面 password:使用字母上方的数字键输入你的密码

weixin_45626706的博客 4625

什么是PHP中的PSR-15规范?

PSR-15规范定义了HTTP服务器中间件的标准接口和行为,以促进PHP中的中间件的互操作性。通过PSR-15规范,PHP社区可以编写和共享符合规范的中间件,以实现各种功能,例如路由、缓存、身份验证等,这些中间件可以在不同的PHP应用程序中复用。此外,由于HTTP请求和响应对象采用标准化的PSR-7接口,因此中间件可以与不同的PHP框架和库集成,提高了PHP生态系统的互操作性。PSR-15规范定义了一种标准的方式来处理HTTP请求和响应,以及在HTTP应用程序中实现可复用的中间件。中间件通常包括一个实现。

周祥平程序专栏 578

Qt多线程实战:如何优雅地处理Modbus设备通信中的线程安全问题

本文深入探讨了在Qt框架下实现Modbus设备通信时的多线程安全问题,提供了优雅的解决方案。通过生产者-消费者模型、任务队列与锁机制等设计模式,有效解决了界面卡顿、数据包错乱等问题。文章还详细介绍了对象生命周期管理、信号槽连接类型选择等关键实现细节,帮助开发者构建稳定可靠的Modbus通信模块。

weixin_30897233的博客 483

php standard,php的SPL(Standard PHP Library)简介

SPL(Standard PHP Library)简介php5以后的版本引入了SPL(Standard PHP Library)。这个库定义了很多有用的接口和类以及少量函数(例如spl_autoload),功能非常强大。大家可以通过 print_r(spl_classes());来打印出自己的php版本所支持的所有spl类和接口。目前已经有不少项目(例如ZF)应用了spl,所以学习spl是很有必要...

weixin_39924329的博客 219

linux下使用Ollama本地部署LLM

Ollama 是一个用于在本地运行大语言模型(如 Llama 2、Mistral、Gemma、Qwen 等)的工具,支持模型的拉取、运行、管理等功能。当你运行ollama。

u013218342的博客 1659

74、刀具磨损监测与寿命预测分析

本文综述了刀具磨损监测与寿命预测的研究现状,分析了力信号、功率信号、振动信号和声发射信号在刀具状态监测中的应用及其优缺点。介绍了当前常用的刀具寿命模型及故障诊断流程,并总结了基于不同信号的监测方法。文章指出,尽管已有多种方法在理论上取得进展,但在实际应用中仍面临挑战。未来研究方向包括采用更先进的神经网络、深入探索多信号融合技术以及有效利用工业大数据,以提升刀具状态识别的准确性与可靠性。

lstm7chronicler的博客 275

告别环境冲突:为每个遥感分析项目创建独立的Python GEE(geemap)虚拟环境

本文介绍了为每个遥感分析项目创建独立的Python GEE(geemap)虚拟环境的方法,帮助科研人员彻底摆脱依赖冲突问题。通过详细的conda环境配置流程、版本兼容矩阵和Jupyter多内核管理实战,实现项目级环境隔离,提升研究可复现性和团队协作效率。

weixin_30940783的博客 360

PHM2010刀具磨损预测完整实现

本文介绍了PHM2010刀具磨损预测项目的完整实现方案。项目采用PHM2010公开数据集,包含6个子数据集,记录了铣削加工过程中7个通道的传感器数据(切削力、振动和声发射信号)。技术路线包括数据预处理(截取中间10万点、小波降噪)、特征提取(时域9个、频域4个特征)、特征融合和皮尔逊相关系数筛选,最终使用BiLSTM模型进行训练和评估。环境配置基于Python 3.9,依赖NumPy、Pandas、PyTorch等库。数据加载和预处理阶段重点处理了传感器信号分段和磨损标签对齐问题,为后续建模奠定基础。

huanghm88的专栏 416

PHP规范——PSR

文章目录什么是PSR?PSR-0: 自动加载规范PSR-0已经废弃,被PSR-4代替PSR-1:基础编码规范PSR-2: 编码风格规范PSR-3:日志接口规范PSR-4:自动加载规范PSR-5:PHPDoc 标准PSR-6:缓存接口规范PSR-7:HTTP 消息接口规范 参考文档 什么是PSR? PSR:PSR 是 PHP Standard Recommendations 的简写,由 PHP FI...

sHuXnHs 383

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

PHP PSR 标准规范

PHP PSR 标准规范 PSR 是 PHP Standard Recommendations (PHP 推荐标准)的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。 PHP FIG,FIG 是 Framework Interoperability Group(框架可互用性小组)的缩写,由几位开源框架的开发者成立于 2009 年,从那开始也选取了很多其他成员进来(包...

kiku 416

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

PHP工程规范——PSR-1

统一的代码规范,有助于培养良好的编码习惯,团队成员间的代码交流更加简单。而对于PHP来说,PSR无疑是目前最好的选择。 PSR,即PHP Standard Recommendations,是目前最流行的PHP相关规范集合。 截止目前,PSR官方给出了19中规范,在阅读规范时需要注意规范的状态。现有的状态分为: - Deprecated 不在推荐了,因为在后续版本中可能被废弃。 -...

书山路遥 413

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

PHP 开发规范 PHP-FIG

主地址:https://psr.phphub.org/子地址:基本编码规范: https://laravel-china.org/topics/2078/psr-specification-psr-1-basic-coding-specification编码风格规范:https://laravel-china.org/topics/2079/psr-specification-psr-2-codi...

༺墨༒眉༻ 1627

PSR-PHP标准规范

简介 PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。 PHP FIG,FIG 是 Framework Interoperability Group(框架可互用性小组)的缩写,由几位开源框架的开发者成立于 2009 年,从那开始也选取了很多其他成员进来(包括但不限于 Laravel, Joo...

技术的搬运工 350

PHP中PSR

PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。 文档整理 PSR-0: Autoloading Standard(自动加载规范)—— http://www.php-fig.org/psr/psr-0/(自2014-10-21已经废弃,PSR-4是现在可推荐的) 中文翻译——http://...

weixin_30814223的博客 96

基于psr规范php框架,PHP-PSR规范

PSR 是 PHP Standard Recommendations 的简写,由PHP FIG组织制定的 PHP 规范,是 PHP 开发的实践标准。PHP FIG,FIG 是 Framework Interoperability Group(框架可互用性小组)的缩写,由几位开源框架的开发者成立于 2009 年,从那开始也选取了很多其他成员进来(包括但不限于Laravel,Joomla,D...

weixin_28842367的博客 300

PHP的PSR系列规范

PSR是PHP Standard Recommendation的简写,它其实应该叫PSRs,即系列推荐标准:目前通过的规范有PSR-0(Autoloading Standard)、PSR-1(Basic Coding Standard)、PSR-2(Coding Style Guide)、PSR-3(Logger Interface)、PSR-4(Improved Autoloading)。它不是...

238

PHP之PSR规范

PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。PSR-1 基础编码规范PHP代码文件 必须 以 &lt;?php 或 &lt;?= 标签开始;PHP代码文件 必须 以 不带 BOM 的 UTF-8 编码;PHP代码中 应该 只定义类、函数、常量等声明,或其他会产生 副作用 的操作(如:生成文件...

baishitongtian的专栏 259

PHP的PSR系列规范都有啥内容

PSR 是PHP Standard Recommendation的简写,它其实应该叫PSRs,即系列推荐标准:目前通过的规范有PSR-0(Autoloading Standard)、PSR-1(Basic Coding Standard)、PSR-2(Coding Style Guide)、PSR-3(Logger Interface)、PSR-4(Im...

weixin_34404393的博客 90

PHP规范之PSR规范

参考:http://psr.phphub.org/PSR 不是PHP官方标准,而是从如Zend、Symfony2等知名PHP项目中提炼出来的一系列标准,目前有越来越多的社区项目加入并遵循该标准。PSR-0 自动加载 X已废弃 PSR-1 基本代码规范 PSR-2 代码样式 PSR-3 日志接口 PSR-4 如何指定文件路径从而自动加载类定义 PSR-1基本代码规范本篇规范制定了代码基本元素的相关标...

Dreamlee的博客 2089

不要当落后的程序员,PHP面试必问的PSR规范

PSR是什么 PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。 PHP FIG,FIG 是 Framework Interoperability Group(框架可互用性小组)的缩写,由...

chuanwei7984的博客 183

PHP-PSR 规范那些事儿_已迁移

为什么80%的码农都做不了架构师?>>> ...

weixin_33778778的博客 105
上一篇: PrestaShop的目录结构详解
下一篇: macOS 上或linux安装 Jenkins
WishYouAFortune
博客等级 码龄15年 1465粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值