zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    JAVA错误:Unable to find config file. Creating new servlet engine config file: /WEBINF/serverconfig.wsdd
    java axis发布web service(二) 发布web service
    JAVA错误:AXIS Web Service Problem: No compiler found in your classpath! (you may need to add ‘tools.jar’)
    JAVA错误:java.lang.UnsupportedClassVersionError: Bad version number in .class file
    JavaScript中的div和filter错误
    拉格朗日乘数法
    Timeout Detection & Recovery (TDR)
    游戏程序员关心的Autodesk Maya 2013相关操作
    Eclipse开发Android程序如何在手机上运行
    我的第一篇随笔
  • 原文地址:https://www.cnblogs.com/guandeng/p/7841465.html
Copyright © 2011-2022 走看看