PSR规范

PSR前言

  • FIG组织制定PHP相关规范,PSR目的通过代码共同点找出一个协作编程的方法


psr0(官方已废弃)

使用自动加载遵守的规范

  • 每个命名空间必须有一个顶级空间名
  • 加载源文件,空间名分割符被转成DIRECTORY_SEPARATOR
  • 类名每个下划线被转成DIRECTORY_SEPARATOR
  • 标准的命名空间加载源文件以 .php 后缀
  • 空间名、类名以大小写字母组合而成
namespacepackageClass_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
namespacepackage_nameClass_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php

PSR-1

基础编码规范

  • 源文件编码格式必须不带BOM的UTF8
  • 缩进4个空格
  • 类的声明括号({})单独一行,方法也是
  • 方法参数之间要有逗号和空格
  • 类中方法和属性带可以见(public,private,protect)
  • 类名用驼峰式(StudlyCaps)大写开头
  • 方法名称 必须 符合 camelCase 式的小写开头驼峰命名规范
  • 类常量必须只由大写字母和下划线(_)组成
  • 代码必须只使用长标签()或短标签树人初(<?=? >)
  • 空间名和类名遵守psr0规范
  • 方法名必须使用camelCase()风格声明
  • 控制结构 if else switch case while for foreach.... 控制结构关键字与括号要有一个空格,开始的圆括号后面及结束的圆括号前面不能有空格。起始花括号与关键字在一行上

副作用:
定义:仅仅通过包含文件,不直接声明类、函数和常量等,而执行的逻辑操作

产生输出 直接require或include,连接外部服务,修改ini配置,触发错误或异常,修改全局或者静态变量,读取或修改文件等等

PSR-2

编码风格规范,减少因代码风格不同而造成不便

  • 遵守PSR-1编码规范
  • 每行 不该 多于80个字符,大于80字符的行 应该 折成多行
  • 每行 一定不可 存在多于一条语句
  • final 必须声明在修饰符前
  • static 必须在修饰符后
  • true false 和null 必须全部小写,关键字全部小写
  • namespace 声明后插入一个空白行
  • use声明句块后必须插入一个空白行
  • 关键词 extends 和 implements必须写在类名称的同一行
  • implements 的继承列表也可以分成多行
  • 方法参数列表中,每个逗号后面必须有一个空格
  • switch case 如果存在非空case直穿语句
<?php
namespace VendorPackage;

use FooInterface;
use BarClass as Bar;
use OtherVendorOtherPackageBazClass;

class Foo extends Bar implements FooInterface
{
    public function sampleFunction($a, $b = null)
    {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        } else {
            BazClass::bar($arg2, $arg3);
        }
    }

    final public static function bar()
    {
        // method body
    }
}
<?php
switch ($expr) {
    case 0:
        echo 'First case, with a break';
        break;
    case 1:
        echo 'Second case, which falls through';
        // no break
    case 2:
    case 3:
    case 4:
        echo 'Third case, return instead of break';
        return;
    default:
        echo 'Default case';
        break;
}

  • 闭包声明时,关键词 function 后以及关键词 use 的前后都必须要有一个空格
  • 开始花括号必须写在声明的同一行,结束花括号必须紧跟主体结束的下一行
  • 参数列表逗号后必须有空格
  • 闭包有默认值参数必须放到最后
<?php
$closureWithArgs = function ($arg1, $arg2) {
    // body
};

$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
    // body
};

PSR-3

日志类库通用接口规范

PSR-4

升级版的PSR-0自动加载规范

  • 下划线不存在实际意义
  • 类名必须大小写敏感
  • autoloader的实现一定不能抛出异常,不能有任何级别的错误以及不应该有返回值
  • 类名必须以.php为后缀
  • 子命名空间必须与相应文件目录匹配,命名空间分隔符作为目录分隔符

psr-0和psr4对比

    定义
    FooBar => vendorfooarsrc
    使用
    use FooBarToolRequest
    PSR-0实际目录 vendorfooarsrcFooBarToolRequest.php
    PSR-4实际目录 vendorfooarsrcToolRequest.php

PSR-6

缓存接口规范

  • 缓存一定不可作为应用程序不可获取核心功能
  • 缓存错误一定不可导致应用程序故障,捕捉底层存储驱动抛出异常
  • 延迟:缓存项可能不会理解被存储到物理缓存池,所有延迟缓存都必须做持久化
  • 命中 请求一个缓存项时,在缓存池能找到对应缓存项,保证不会因任何原因出现错误,确保验证isHit()才调用get()获取数据

PSR-7

HTTP消息传递接口

  • HTTP信息包含大小写不明感头信息(接口实现类必须大小写敏感)
请求方法 目标地址 HTTP协议
POST /path HTTP/1.1
目的主机 空一行消息内容
Host: example.com

foo=bar&baz=bat
HTTP协议 状态么 描述文本
HTTP/1.1 200 OK
内容类型 空一行消息内容
Content-Type: text/plain

foo=bar&baz=bat

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md

https://www.phpxy.com/psr/

原文地址:https://www.cnblogs.com/guandeng/p/7841465.html