php编码规范

Posted by linhancai on March 26, 2021

1.文件

PHP代码文件必须以 < ? php 或 < ? = 标签开始; PHP代码文件必须以 不带BOM的 UTF-8 编码; PHP代码文件必须使用Unix LF (linefeed)作为行的结束符; PHP代码文件必须以一个空白行作为结束; 纯PHP代码文件必须省略最后的 ?> 结束标签;

2.行

行的长度一定不能有硬性的约束,软性的长度约束一定要限制在120个字符以内; 每行一定不能存在多于一条语句; 合理的使用空行区分不同逻辑的代码;

3.关键字

PHP所有关键字以及true/false/null必须全部小写;

4.缩进

缩进应该能够反映出代码的逻辑,尽量使用四个空格;

5.命名

命名要有描述性,少用缩写; 类名只允许使用字母,使用大驼峰法(CalmaCase); 类的方法使用大驼峰法(CalmaCase); 类的属性使用小驼峰法(calmaCase); 类的属性可以使用m_来区分非公有属性; 变量名使用小驼峰法(calmaCase);

6.注释

6.1.行注释

// 后面需要加一个空格; 如果 // 前面有非空字符,则 // 前面需要加一个空格; 如果若干行都需要注释,保持//垂直对齐

$foo = array(
        'a' => 'How are you?'                   // 保持
        'b' => 'I\'m fine. Thank you. And you?' // 对齐
    );

6.2.块注释

类,方法,函数需要加块注释,如果使用标签,如@param ,@return ,请遵守 phpDocument 标签规则。 phpDocument文档:https://phpdoc.org/docs/latest/index.html

<?php
/**
 * This is a sample function to illustrate additional PHP
 * formatter options.
 *
 * @param mixed  $one   The first parameter
 * @param int    $two   The second parameter
 * @param string $three The third parameter with a longer
 *                      comment to illustrate wrapping.
 * @return  void
 * @author  phper
 */
function Bar($one, $two = 0, $three = "String") {

}

7.类、属性和方法

7.1.namespace 以及 use 声明

namespace 声明后 必须 插入一个空白行。 所有 use 必须 在 namespace 后声明。 每条 use 声明语句 必须 只有一个 use 关键词。 use 声明语句块后 必须 要有一个空白行。

<?php
namespace Vendor\Package; //下面必须空格一行

use FooClass;  // use 必须在namespace 后面声明
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass; // 下面必须空格一行

// ... additional PHP code ...

7.2.类

关键词 extendsimplements 必须写在类名称的同一行。

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

7.3.属性

每个属性都必须添加访问修饰符; 一定不可使用关键字 var 声明一个属性; 每条语句一定不可定义超过一个属性;

<?php
class ClassName {

    public $foo = null; //必须添加访问修饰符。
    //var $bar = 1;一定不可使用关键字 var 声明一个属性。
    //public $bar=2,$foo=1;每条语句一定不可定义超过一个属性。
}

7.4.方法

所有方法都必须添加访问修饰符; 需要添加 abstractfinal 声明时, 必须写在访问修饰符前,而 static 则必须写在其后; 类中的常量所有字母都必须大写,单词间用下划线分隔; 有默认值的参数,必须放到参数列表的末尾。

class ClassName {
    public static function Foo() { //  static必须写在后面。
        //method body 
    }
    
    final public static function Bar() {// final放前面,static放最后。
        //method body
    }
}

8.控制语句

8.1.if 、 elseif 和 else

控制结构的开始花括号({)写在声明的同一行,而结束花括号(})必须写在主体后自成一行; 建议使用关键词 elseif 代替所有 else if ,以使得所有的控制关键字都像是单独的一个词; 尽量避免三次以上的嵌套;

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

8.2.switch 和 case

标准的 switch 结构如下代码所示,留意括号、空格以及花括号的位置。 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;
}

8.3.while 、 do while 、 for 、 foreach

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

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

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

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

}
foreach ($iterable as $key => $value) {
 
}