排版
(强制) 程序块要采用缩进风格编写,缩进的空格数为4个。
说明: tab缩进在不同的tab step下可读性相差较大,所以将tab替换为4个空格,可保证在所有环境下缩进都会一致。
(建议) 类、方法定义的开始花括号位于下一行,而控制语句的开始大括号位于同一行的末尾,结束的花括号位于最末一行后,且独占一行。如:
class TestsController { public function index() { if ($a > $b) { } } }
(强制) if/while等结构体,即使只有一行,也必须加上左右花括号,不允许写成一行。这样做可读性更好,并且方便修改。
(建议) 适当控制每行代码的长度(一般不超过80个字符)
(建议) 避免由于对错误的条件做判断带来if的嵌套。 说明: 减少if/else嵌套, 更利于代码逻辑的理解。
不推荐的写法:
if ($a === false) { // error handle } else { if($b === false) { //handle } }
推荐的写法:
if ($a === false) {
// error handle
}
if($b === false) {
// handle
}
(强制) if 语句的条件若较多应折行;新行以逻辑运算符起始,与第一行 if 左括号后的第一个字符对齐;折行后,每行条件具有独立而明确的语义。
(建议) 多行的”=”可能的话尽量用空格对齐。
(强制) 初始化array如果采用多行结构时,数据项部分需要缩进,且最后一个数据项后面的逗号不可省略, 在修改代码增加数据项的时候不容易出现语法错误。
(强制) 对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 “?>”
(强制) 每行结尾不允许有多余的空格。
命名
(强制) 常量命名使用全部大写字符,单词之间以’_’连接。
(强制) 类中的常量 constant 和全局范围内常量define,只能由大写字母和下划线组成,各个单词之间以下划线分割。 如:
define('COURSE_STATUS_NORMAL', 1); define('COURSE_STATUS_FROZEN', 2);
(强制) 类、method命名采用驼峰命名, 普通function采用过程函数风格(蛇形命名)命名。如:
//驼峰命名 class MyCoursesController { public function courseLists() { } } //蛇形命名 function mb_strlen($string, $encoding = null) { }
(强制) 私有函数命名需加上 ‘_’前缀。
(强制) 关键字、boolean值和null必须小写。
(强制) namespace 声明、use声明、include/require 后必须有一个空行,且namespace声明在use声明之前。
注释
(强制) 文件、函数、类以及成员变量都必须包含注释。类文件/普通文件的注释, 说明该文件的主要作用。
(强制) 单行注释使用//, 不能使用#; 多行注释/* 和 */不能出现在同一行。
(强制) 函数必须通过param和return标记指明其参数和返回值。
(建议) 关于@todo。原则上尽量不要引入@todo注释。除非特殊情况, 可以在类注释、函数注释、代码段中加入此标签,用于声明当前代码未尽事宜,以便后续完善补充。