「PSR」 笔记

PSRPHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。
详细请看: PHP 标准规范

PSR-1

基本代码规范

  • PHP代码文件必须<?php<?=标签开始;
  • PHP代码文件必须不带BOM的UTF-8编码;
  • PHP代码中应该只定义类、函数、常量等声明,或其他惠产生副作用的操作(如:生成文件输出以及修改php.ini配置文件等)二者只能选其一;
  • 命令空间以及类必须符合PSR的自动加载规范: [PSR-4]中的一个;
  • 类的命名必须遵循StudlyCaps大写开头的驼峰命名规范;
  • 类中的常量所有字母都必须大写,单词间用下划线分隔;
  • 方法名称必须符合camelCase式的小写开头驼峰命名规范;

类的属性命名可以遵循

  • 大写开头的驼峰式($StudlyCaps)
  • 小写开头的驼峰式($camelCase)
  • 下划线分隔式($under_score)

PSR-2

编码风格规范

  • 代码必须遵循[PSR]中的编码规范;
  • 代码必须使用4个空格符而不是[Tab键]进行缩进;
  • 每行的字符数应该软性保持在80个之内,理论上一定不可多于120个,但一定不可有硬性限制;
  • 每个namespace命名空间声明语句和use声明语句块后面,必须插入一个空白行;
  • 类的开始花括号{必须写在函数声明后自成一行,结束花括号}必须写在函数主题后自成一行;
  • 方法的开始花括号{必须写在函数声明后自成一行,结束花括号}必须写在函数主题后自成一行;
  • 类的属性和方法必须添加访问修饰符(privateprotected以及public), abstract以及final必须声明在访问修饰符之前, 而static必须声明在访问修饰符之后;
  • 控制结构的关键字后必须要有一个空格符, 而调用方法或函数时则一定不可有;
  • 控制结构的开始花括号{必须写在声明的同一行,而结束的花括号}必须写在主体后自成一行;
  • 控制结构的开始左括号后和结束右括号前,都一定不可有空格符

PSR-3

日志接口规范

本规范的主要目的,是为了让日志类库以简单通用的方式,通过接收一个 Psr\Log\LoggerInterface 对象,来记录日志信息。

  • LoggerInterface 接口对外定义了八个方法,分别用来记录 RFC 5424 中定义的八个等级的日志:

    • debug
    • info
    • notice
    • warning
    • error
    • critical
    • alert
    • emergency
  • 第九个方法 —— log,其第一个参数为记录的等级。可使用一个预先定义的等级常量作为参数来调用此方法,
    必须 与直接调用以上八个方法具有相同的效果。如果传入的等级常量参数没有预先定义,
    必须 抛出 Psr\Log\InvalidArgumentException 类型的异常。
    在不确定的情况下,使用者 不该 使用未支持的等级常量来调用此方法。

PSR-4

自动加载规范

  • 此处的[类]泛指所有的[Class类]、[接口]、[traits可复用代码块]以及其他类似结构;

  • 一个玩转的类名需具有以下结构

    <命名空间>(<子命名空间>)*<类名>

    • 完整的类名 必须 要有一个顶级命名空间,被称为 "vendor namespace";
    • 完整的类名 可以 有一个或多个子命名空间;
    • 完整的类名 必须 有一个最终的类名;
    • 完整的类名中任意一部分中的下滑线都是没有特殊含义的;
    • 完整的类名 可以 由任意大小写字母组成;
    • 所有类名都 必须 是大小写敏感的;
  • 当根据完整的类名载入相应的文件

    • 完整的类名中,去掉最前面的命名空间分隔符,前面连续的一个或多个命名空间和子命名空间,作为「命名空间前缀」,其必须与至少一个「文件基目录」相对应;
    • 紧接命名空间前缀后的子命名空间 必须 与相应的「文件基目录」相匹配,其中的命名空间分隔符将作为目录分隔符
    • 末尾的类名 必须 与对应的以 .php 为后缀的文件同名;
    • 自动加载器(autoloader)的实现 一定不可 抛出异常、一定不可 触发任一级别的错误信息以及 不应该 有返回值。

PSR-6

缓存接口规范

  • 调用类库(Calling Library) - 调用者, 使用缓存服务的类库,这个类库调用缓存服务,
    调用的是此缓存接口规范的具体「实现类库」,调用者不需要知道任何「缓存服务」的具体实现。

  • 实现类库 (Implementing Library) - 此类库是对「缓存接口规范」的具体实现,封装起来的缓存服务,供「调用类库」使用。实现类库 必须 提供 PHP 类来实现
    Cache\CacheItemPoolInterfaceCache\CacheItemInterface 接口。
    实现类库必须支持最小的如下描述的TTL功能, 秒级别的精准度.

  • 生存时间值 (TTL - Time To Live) - 定义了缓存可以存活的时间,以秒为单位的整数值。

  • 过期时间 (Expiration) - 定义准确的过期时间点,一般为缓存存储发生的时间点加上 TTL 时间值,也可以指定一个 DateTime 对象。

  • 键 (KEY) - 长度大于 1 的字串,用作缓存项在缓存系统里的唯一标识符

  • 命中 (Hit) - 一个缓存的命中,指的是当调用类库使用「键」在请求一个缓存项的时候,在缓存池里能找到对应的缓存项,并且此缓存项还未过期,并且此数据不会因为任何原因出现错误

  • 未命中 (Miss) - 一个缓存未命中,是完全的上面描述的「命中」的相反

  • 延迟 (Deferred) - 一个延迟的缓存,指的是这个缓存项可能不会立刻被存储到物理缓存池里。

数据

实现类库 必须 支持所有的可序列化的 PHP 数据类型,包含:

  • 字符串 - 任何大小的PHP兼容字符串
  • 整数 - PHP支持的低于64位的有符号整数值
  • 浮点数 - 所有的有符号浮点数
  • 布尔 - truefalse
  • Null - null
  • 数组 - 各种形式的PHP数组
  • 对象(Object) - 所有的支持无损序列化和反序列化的对象

PSR-7

HTTP 消息接口规范

HTTP 消息是 Web 技术发展的基础。浏览器或 HTTP 客户端如 curl 生成发送 HTTP 请求消息到 Web 服务器,Web 服务器响应 HTTP 请求。
服务端的代码接受 HTTP 请求消息后返回 HTTP 响应消息。

消息

一个 HTTP 消息,指定是一个从客户端发往服务器端的请求,或者是服务器端返回客户端的响应。对应的两 个消息接口:

  • Psr\Http\Message\RequestInterface
  • Psr\Http\Message\ResponseInterface

HTTP 头信息

大小写不敏感的字段名字

HTTP 消息包含大小写不敏感头信息。使用 MessageInterface 接口来设置和获取头信息,大小写 不敏感的定义在于,
如果你设置了一个 Foo 的头信息,foo 的值会被重写,你也可以通过 foo 来 拿到 FOO 头对应的值。

对应多条数组的头信息

为了适用一个 HTTP 「键」可以对应多条数据的情况,我们使用字符串配合数组来实现,
你可以从一个 MessageInterface 取出数组或字符串,使用 getHeaderLine($name) 方法可以获取通过逗号分割的不区分大小写的字符串形式的所有值。
也可以通过 getHeader($name) 获取数组形式头信息的所有值。

注意:并不是所有的头信息都可以适用逗号分割(例如 Set-Cookie),当处理这种头信息时候, MessageInterace 的继承类 应该 使用 getHeader($name) 方法来获取这种多值的情况

主机信息

在请求中,Host 头信息通常和 URIhost 信息,还有建立起 TCP 连接使用的 Host 信息一致。 然而,HTTP 标准规范允许主机 host 信息与其他两个不一样。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2023 Keep It Simple And Stupid All Rights Reserved.

访客数 : | 访问量 :