PHP编码规范

目的

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

整体要求

本规范以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 标准规范

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容