zoukankan      html  css  js  c++  java
  • php开发规范

    PSR-[0-4]

    • PSR —— Proposing a Standards Recommendation
    • PSR-0 (Autoloading Standard) 自动加载标准
    • PSR-1 (Basic Coding Standard) 基础编码标准
    • PSR-2 (Coding Style Guide) 编码风格向导
    • PSR-3 (Logger Interface) 日志接口
    • PSR-4 (Improved Autoloading) 自动加载的增强版,可以替换掉PSR-0了。

    PSR-1

    1. PHP源文件必须只使用 <?php 和 <?= 这两种标签。
    2. 源文件中php代码的编码格式必须是不带字节顺序标记(BOM)的UTF-8。
    3. 一个源文件建议只用来做声明(类(class),函数(function),常量(constant)等)或者只用来做一些引起副作用的操作(例如:输出信息,修改.ini配置等),但不建议同时做这两件事。
    4. 命名空间(namespace)和类(class) 必须遵守PSR-0标准。
    5. 类名(class name) 必须使用骆驼式(StudlyCaps)写法 (注:驼峰式(cameCase)的一种变种,后文将直接用StudlyCaps表示)。
    6. 类(class)中的常量必须只由大写字母和下划线(_)组成。
    7. 方法名(method name) 必须使用驼峰式(cameCase)写法。

    PSR-2

    • 文件末尾必须空一行。
    • 必须使用Unix LF(换行)作为行结束符。
    • 纯PHP代码源文件的关闭标签?>必须省略。
    • 缩进必须使用4个空格来缩进
    • 一行推荐的是最多写80个字符
    • php的关键字,必须小写,boolean值:true,false,null 也必须小写
    • 命名空间
      • 命名空间(namespace)的声明后面必须有一行空行。
      • 所有的导入(use)声明必须放在命名空间(namespace)声明的下面。
      • 一句声明中,必须只有一个导入(use)关键字。
      • 在导入(use)声明代码块后面必须有一行空行。
    <?php
    namespace LibDatabases;  // 下面必须空格一行
     
    use FooInterface;  //use 必须在namespace 后面声明
    use BarClass as Bar;
    use OtherVendorOtherPackageBazClass; //  下面必须空格一行
     
    class Mysql
    {
    }
    
    • extends, implement 必须和 class name 写在一行,切花括号要换行写。
    <?php
    namespace LibDatabaes;
     
    class Mysql extends ParentClass implements PDO, DB // 写一行
    { //换行写{
    }
    
    • 属性(property)必须声明其可见性,到底是 public 还是protected还是 private,不能省略
    • 方法(method) ,必须 声明其可见性,到底是 public 还是protected还是 private,不能省略。花括号{必须换行写。如果有多个参数,第一个参数后紧接, ,再加个空格,且函数name和( 之间必须要有个空格:function_name($par, $par2, $pa3), 如果参数有默认值,也要用左右空格分开
    <?php
    namespace LibDatabaes;
     
    class Mysql extends ParentClass implements PDO, DB // 写一行
    {
        public getInfo($name, $age, $gender = 1) //函数名getInfo和(之间有个空格,参数之间也要有空格。默认参数也要左右都有空格
        { //必须换行写{
        }
    }
    
    • 当用到抽象(abstract)和终结(final)来做类声明时,它们必须放在可见性声明 (public 还是protected还是private)的前面。而当用到静态(static)来做类声明时,则必须放在可见性声明的后面
    <?php
    namespace VendorPackage;
     
    abstract class ClassName
    {
        protected static $foo; //static放后面
        abstract protected function zim(); //abstract放前面
        final public static function bar() //final放前面,static放最后。
        {
            // 方法主体部分
        }
    }
    
     
    • 函数调用
      • 括号前后不要有空格
      • 逗号前不要空格, 逗号后加空格
      • 多行参数书写, 第一个参数需换行, 且每行一个参数 <?php bar(); $foo->bar($arg1); Foo::bar($arg2, $arg3); <?php $foo->bar( $longArgument, $longerArgument, $muchLongerArgument );
    • 控制结构
      <?php
       
      if ($expr1) { //左右空格
          // if body
      } elseif ($expr2) { //elesif 连着写
          // elseif body
      } else {
          // else body;
      }
      
      <?php
       
      switch ($expr) { //左右空格
          case 0:
              echo 'First case, with a break'; //对其
              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;
      }
      
     
    <?php
     
    while ($expr) { //左右空格
        // structure body
    }
    do {
        // structure body;  //左右空格
    } while ($expr);
    
    <?php
     
    for ($i = 0; $i < 10; $i++) { //注意几个参数之间的空格
        // for body
    }
    
    <?php
     
    foreach ($iterable as $key => $value) { //还是空格问题
        // foreach body
    }
    
    <?php
     
    try {
        // try body
    } catch (FirstExceptionType $e) { //同样也是注意空格。
        // catch body
    } catch (OtherExceptionType $e) {
        // catch body
    }
    
     
      • 闭包

    <?php
     
    closureWithArgs = function($arg1, $arg2) {
        // body
    };
    closureWithArgsAndVars = function($arg1, arg2) use($var1, $var2) {
        // body
    };
    
    <?php
     
     
    $longArgs_noVars = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument
    ) {
        // body
    };
    
    <?php
     
     
    $noArgs_longVars = function () use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3
    ) {
        // body
    };
    
    <?php
     
     
    $longArgs_longVars = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument
    ) use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3
    ) {
        // body
    };
    
    <?php
     
     
    $longArgs_shortVars = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument
    ) use ($var1) {
        // body
    };
    
    <?php
     
     
    $shortArgs_longVars = function ($arg) use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3
    ) {
        // body
    };
    
     
     
     
     
     

    PSR-3

    • 日志接口

    PSR-4

      • autoload相关
      • 此处的“类”泛指所有的class类、接口、traits可复用代码块以及其它类似结构。
      • 一个完整的类名需具有以下结构:

        <命名空间>(<子命名空间>)*<类名>
      • 完整的类名必须要有一个顶级命名空间,被称为 "vendor namespace";
      • 完整的类名可以有一个或多个子命名空间;
      • 完整的类名必须有一个最终的类名;
      • 完整的类名中任意一部分中的下滑线都是没有特殊含义的;
      • 完整的类名可以由任意大小写字母组成;
      • 所有类名都必须是大小写敏感的。
      • 完整的类名中,去掉最前面的命名空间分隔符,前面连续的一个或多个命名空间和子命名空间,作为“命名空间前缀”,其必须与至少一个“文件基目录”相对应;
      • 紧接命名空间前缀后的子命名空间必须与相应的”文件基目录“相匹配,其中的命名空间分隔符将作为目录分隔符。
      • 末尾的类名必须与对应的以 .php 为后缀的文件同名。
      • 自动加载器(autoloader)的实现一定不能抛出异常、一定不能触发任一级别的错误信息以及不应该有返回值。
  • 相关阅读:
    List of 3rd Party .NET UI & Reporting Components
    cannot open window service on computer '.' in window application
    CentOS7重新生成 /boot/grub2/grub.cfg
    vmware esxi 查看网卡、Raid卡驱动
    libcmt.lib和msvcrt.lib冲突,原因和解决方法
    C/C++注释规范
    lsof命令查看端口关联的文件
    linux下查看磁盘分区的文件系统格式
    编译linux kernel及制作initrd ( by quqi99 )
    三种虚拟化技术比较
  • 原文地址:https://www.cnblogs.com/pcx105/p/10919812.html
Copyright © 2011-2022 走看看