7. 其他

优质
小牛编辑
133浏览
2023-12-01

1.【强制】 每个源文件不应该超过 4000 行,每个方法体不应该超过 150 行代码(不包含 注释)

2.【强制】 一行只声明一个变量。一个变量有且只有一个功能,不能把一个变量用于多种用途。 变量声明应注意其生命周期,最好定义在变量作用范围代码段的开始部分。最好不要下一行要用,上一行才声明。

反例:

int $level, $size;
public function myMethod() {
    $myFlag = false;
    $myFlag = isVisible($myView)//作为可见性判断标志
    //使用 myFlag 做其它操作
    ......
    //作为可用性判断标志(这里应该重新定义一个变量表示)
    $myFlag = isEnable($myComponent)
}

3.【强制】 git 提交的时候的时候需要写明改动备注,项目发布版本的时候需要写比较详细的升级记录,比如解决了什么 bug,新增了什么功能等 提交备注必须严格按照:operation + comment 的格式,operation 代表操作,comment 表示具体的改动,如:

  • add : 新增用户注册功能
  • update : 更新用户注册流程
  • fixed : 修复了 xxx bug
  • remove : 移除了用户日志功能模块

4.【推荐】 控制器是充分体现系统业务功能的地方。好的控制器不宜写入过于复杂的逻辑,应条理清晰,注释到位,要充分考虑封装、重用等问题。

5.【强制】 后台发出通过重定向时,url 参数含有字或母数字外的其它字符应该进行编码处理,避免接收参数值发生错误(中文乱码,特殊符号无法正确传 递等)。另外重定向后也应该加入 die() 或者 exit();

正例:

header("location:/user/login?cc=".urlencode('你好!'));
die();

6.【强制】 PHP keywords 必须使用小写。PHP 常量 true, false 和 null 必须使用小写。

类和函数规约

1.【强制】 一个文件中只写一个类,所有PHP文件必须以一个空白行作为结束。纯PHP代码文件必须省略最后的 ?> 结束标签。

2.【强制】 一个类的 extends 和 implements 关键词必须和类名在同一行。implements 一个列表可以被拆分为多个有一次缩进的后续行。如果这么做,列表 的第一项必须要放在下一行,并且每行必须只有一个接口。

正例:

class ClassName extends ParentClass implements ArrayAccess, Countable {
// constants, properties, methods 
}

//或者这样也是可以的
class ClassName extends ParentClass implements ArrayAccess,
    Countable,
    Serializable {
// constants, properties, methods
}

3.【强制】 关于类的属性

  • 所有的属性必须声明可见性。
  • var 关键词不可用来声明属性。
  • 一个语句不可声明多个属性。
  • 属性名称可以使用单个下划线作为前缀来表明保护或私有的可见性。

正例:

class ClassName {
    public $foo = null;
    private $_bar = 1; 
}

4.【强制】 关于函数和方法

  • 所有的方法必须声明可见性。
  • 方法名不应只使用单个下划线来表明是保护或私有的可见性。
  • 方法名在声明之后不可跟随一个空格。左花括号放在下面自成一行或者紧跟小括号,并且右花括号必须放在方法主体的下面自成一行。 左括号后面不可有空格,右括号前面不可有空格。
  • 一个方法定义看来应该像下面这样。 注意括号,逗号,空格和花括号。
  • 在参数列表中,逗号之前不可有空格,逗号之后必须要有一个空格。
  • 方法中有默认值的参数必须放在参数列表的最后面。
  • 参数列表可以被分为多个有一次缩进的多个后续行。如果这么做,列表的第一项必 须放在下一行,并且每行必须只放一个参数。
  • 当参数列表被分为多行,右括号和左花括号必须夹带一个空格放在一起自成一行。
  • 如果存在,abstract 和 final 声明必须放在可见性声明前面。
  • 如果存在,static声明必须跟着可见性声明。

正例:

class ClassName {
    public function fooBarBaz($arg1, &$arg2, $arg3 = []) {
        // method body
    } 
}

//或者
class ClassName {
    public function fooBarBaz($arg1, &$arg2, $arg3 = []) {
        //如果是这样写,第一行必须空行
        // method body 
    }
}

class ClassName {
    public function aVeryLongMethodName( 
        ClassTypeHint $arg1,
        &$arg2,
        array $arg3 = []
    ){

        //method body
    } 
}