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/

  • 相关阅读:
    PAIRING WORKFLOW MANAGER 1.0 WITH SHAREPOINT 2013
    Education resources from Microsoft
    upgrade to sql server 2012
    ULSViewer sharepoint 2013 log viewer
    Top 10 Most Valuable Microsoft SharePoint 2010 Books
    讨论 Setsockopt选项
    使用 Alchemy 技术编译 C 语言程序为 Flex 可调用的 SWC
    Nagle's algorithm
    Nagle算法 TCP_NODELAY和TCP_CORK
    Design issues Sending small data segments over TCP with Winsock
  • 原文地址:https://www.cnblogs.com/guandeng/p/7841465.html
Copyright © 2011-2022 走看看