美文网首页
PHP编码规范

PHP编码规范

作者: 樱雪之城shang | 来源:发表于2018-05-30 09:32 被阅读0次

    目的

    为了更好的提高技术部的工作效率,保证开发的有效性和合理性,并可最大程度的提高程序代码的可读性和可重复利用性,指定此规范。

    整体要求

    本规范以PSR规范为基础扩展补充制定。 完全遵守PSR-1, PSR-2规范。
    规范包命名规范、代码缩进规则、控制结构、函数调用、函数定义、注释、包含代码、PHP标记、文件头的注释块、常量命名等方面的规则。

    规范

    • 文件
    • 源文件 必须 只使用 <?php。
    • 源文件中php代码的编码格式 必须 只使用不带BOM的UTF-8。
    • 源文件在文件结尾处 必须 忽略掉?>且 必须 以一个空行结尾。
    • 类定义文件建议使用类名作为文件名。
    • 类文件必须使用命名空间为路径存储。
    • 类文件名和类名保存一致,用首字母大写。其他文件全部用小写字母加下划线。
    • 基础规范
      一个源文件 建议 只用来做声明(类,函数,常量等)或者只用来做一些辅助作用的操作(例如:输出信息,修改.ini配置等),但不应当同时做这两件事。
      类名 必须 使用 StudlyCaps 写法,比如SampleController。
      类中的常量 必须 只由大写字母和下划线(_)组成。
      方法名 必须 使用 camelCase(驼峰式)写法,比如getTotalById。
    • 代码规范
      代码必须使用4个空格符而不是 tab键 进行缩进。
      备注: 使用空格而不是 tab键 缩进的好处在于,
      避免在比较代码差异、打补丁、重阅代码以及注释时产生混淆。
      并且,使用空格缩进,让对齐变得更方便。

    关键字 以及 true / false / null

    PHP所有 关键字必须全部小写。
    常量 true 、false 和 null 也必须全部小写。

    每行的字符数应该保持在100个以内, 通常情况不应超过150个。如果换行可能破坏语意或降低可阅读性,可作为例外超出限制。

    每个 namespace 命名空间声明语句和 use 声明语句块后面,必须插入一个空白行。所有 use 必须 在 namespace 后声明。每条 use 声明语句 必须 只有一个 use 关键词。use 声明语句块后 必须 要有一个空白行。例如:

      <?php
      namespace Vendor\Package;
    
      use FooClass;
      use BarClass as Bar;
      use OtherVendor\OtherPackage\BazClass;
    
      // ... additional PHP code ...
    扩展与继承,关键词 extends 和 implements 必须写在类名称的同一行,类的开始花括号必须独占一行,结束花括号也必须在类主体后独占一行。
    
      namespace Vendor\Package;
    
      use FooClass;
      use BarClass as Bar;
      use OtherVendor\OtherPackage\BazClass;
    
      class ClassName extends ParentClass implements \ArrayAccess, \Countable
      {
          // constants, properties, methods
      }
    

    implements 的继承列表也可以分成多行,这样的话,每个继承接口名称都必须分开独立成行,包括第一个。

      <?php
      namespace Vendor\Package;
    
      use FooClass;
      use BarClass as Bar;
      use OtherVendor\OtherPackage\BazClass;
    
      class ClassName extends ParentClass implements
          \ArrayAccess,
          \Countable,
          \Serializable
      {
          // constants, properties, methods
      }
    

    类的开始花括号({)必须写在函数声明后自成一行,结束花括号(})也必须写在函数主体后自成一行。

    方法的开始花括号({)必须写在函数声明后自成一行,结束花括号(})也必须写在函数主体后自成一行。

    一个标准的方法声明可参照以下范例,留意其括号、逗号、空格以及花括号的位置。

      <?php
      namespace Vendor\Package;
    
      class ClassName
      {
          public function fooBarBaz($arg1, &$arg2, $arg3 = [])
          {
              // method body
          }
      }
    

    类的属性和方法必须添加访问修饰符(private、protected 以及 public), abstract 以及 final 必须声明在访问修饰符之前,而 static 必须声明在访问修饰符之后。

    以下是属性声明的一个范例

      <?php
      namespace Vendor\Package;
    
      class ClassName
      {
          public $foo = null;
      }
    

    需要添加 abstract 或 final 声明时, 必须 写在访问修饰符前,而 static 则必须写在其后。

      <?php
      namespace Vendor\Package;
    
      abstract class ClassName
      {
          protected static $foo;
    
          abstract protected function zim();
    
          final public static function bar()
          {
              // method body
          }
      }
    
    
    • 控制结构的基本规范如下

    控制结构的关键字后 必须 要有一个空格符,而调用方法或函数时则一定不能有。
    控制结构的开始花括号({) 必须 写在声明的同一行,而结束花括号(})必须写在主体后自成一行。
    控制结构的开始左括号后和结束右括号前,都一定不能有空格符。
    case 语句 必须 相对 switch 进行一次缩进,而 break 语句以及 case 内的其它语句都 必须 相对 case 进行一次缩进。
    如果存在非空的 case 直穿语句,主体里必须有类似 // no break 的注释。例如:

      <?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;
      }
    

    应该 使用关键词 elseif 代替所有 else if,以使得所有的控制关键字都像是单独的一个词。例如:

      <?php
      if ($expr1) {
          // if body
      } elseif ($expr2) {
          // elseif body
      } else {
          // else body;
      }
    

    运算符(=, +, -, *, /, %, +=等等)左右两边 必须要有 一个空格。
    参数和变量列表中逗号(,)前 必须不能有 空格,而逗号后 必须要有 空格。

     <?php
     namespace Vendor\Package;
    
     class ClassName
     {
         public function foo($arg1, &$arg2, $arg3 = [])
         {
             // method body
         }
     }
    

    参数列表可以分列成多行,这样,包括第一个参数在内的每个参数都 必须 单独成行。
    拆分成多行的参数列表后,结束括号以及方法开始花括号 必须 写在同一行,中间用一个空格分隔。

      <?php
      namespace Vendor\Package;
    
      class ClassName
      {
          public function aVeryLongMethodName(
              ClassTypeHint $arg1,
              &$arg2,
              array $arg3 = []
          ) {
              // method body
          }
      }
    

    while 和 do while。一个规范的 while 语句应该如下所示,注意其 括号、空格以及花括号的位置。

     <?php
     while ($expr) {
         // structure body
     }
    

    标准的 do while 语句如下所示,同样的,注意其 括号、空格以及花括号的位置。

    <?php
     do {
         // structure body;
     } while ($expr);
    

    标准的 for 语句如下所示,注意其括号、空格以及花括号的位置

     <?php
     for ($i = 0; $i < 10; $i++) {
     // for body
     }
    

    标准的 foreach语句如下所示,注意其括号、空格以及花括号的位置。例如:

     <?php
     foreach ($iterable as $key => $value) {
         // foreach body
     }
    

    标准的 try catch语句如下所示,注意其括号、空格以及花括号的位置。例如:

     <?php
     try {
         // try body
     } catch (FirstExceptionType $e) {
         // catch body
     } catch (OtherExceptionType $e) {
         // catch body
     }
    

    闭包声明时,关键词 function 后以及关键词use的前后都必须要有一个空格。

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

    变量名统一用驼峰命名法。

    PHP 标准规范

    相关文章

      网友评论

          本文标题:PHP编码规范

          本文链接:https://www.haomeiwen.com/subject/nvftsftx.html