百度PHP编码规范
目录
0 前言 ......................................................................................................................................... 2
1 排版 ......................................................................................................................................... 3
2 命名 ......................................................................................................................................... 7
3 注释 ......................................................................................................................................... 9
4 编码原则 ................................................................................................................................12
5.安全编码 .................................................................................................................................15
附录 PHP 安全编码规范 ...........................................................................................................16
仅供内部使用
1
0 前言
编码风格没有太多的好坏之分, 最重要的是风格保持一致,编码规范有助于规范我们编码
的风格,使代码具有更好的可读性。
PHP 在百度内部应用得越来越广泛,但是却缺乏相应的编码规范支持,编码风格百家齐放,
不利于我们代码的维护和传承, 根据大家平时的开发情况,制定了此 PHP 编码规范。
每项规范前面的(强制) 代表该规范需要强制执行, (建议)代表推荐执行但不强制。
注: 文中所有的变量名前面为了方便没有加”$”, 示意即可。
PHP 编码规范制定人:
王继平、刘斌、宋琦、庞博、李强、洪定坤、张东进
PHP 安全编码规范制定人:
SYS 部门 SSL 组
仅供内部使用
2
1 排版
¹1-1:(强制)程序块要采用缩进风格编写,缩进的空格数为 4 个。
说明:不同的缩进风格对代码的可读性影响很大,以 tab 为缩进单位在不同的 tab step
下可读性也相差很多,所以将缩进定为一个 soft tab 即 4 个空格,这样在所有环
境下缩进都会保持一致。
¹1-2:(建议)关键字与其后的左括号之间有一个空格,而函数名与左括号之间不应有任何字符
包括空格。
说明:虽然很多情况下编辑器的highlight已经做了区分,但是从格式上区分关键字和函
数适用于所有的情况。
如:
关键字 if (a > b)
函数名 funcA()
¹1-3:(建议)开始的大括号位于一行的末尾,结束的括号位于最末一行后,且独占一行。
如:
if (a > b) {
}
“{”独占一行的风格也可以, 但是建议两种风格只取其一。
仅供内部使用
3
¹1-4:(强制)if/while等结构体,即使只有一行,也必须加上左右花括号,不允许写成一
行。
说明: 这样做可读性更好,并且方便修改。
如:
if (a > b) {
a = 1;
}
¹1-5:(建议)适当控制每行代码的长度(一般不超过 80 个字符)
说明: 代码更美观, 可读性更好
¹1-6:(强制)elseif语句使用elseif形式,不使用else if形式。
说明: elseif 为标准语法
¹1-7:(建议)函数名与其后的左括号之间不应有任何字符(包括空格),
函数调用的左括号与其第一个参数之间不应有任何字符(包括空格)
最后一个参数与右括号之间不应有任何字符(包括空格)
参数列表的逗号后面应有一个空格
如:
funcA(a, b, c) {
}
仅供内部使用
4
¹1-8:(建议)避免由于对错误的条件做判断带来if的嵌套。
说明: 减少if/else嵌套, 更利于代码逻辑的理解。
不推荐的方式:
if (a === false) {
// error handle
} else {
if (b === false) {
// handle
}
}
推荐的方式:
if (a === false) {
// error handle
}
if (b === false) {
// handle
}
¹1-9:(强制)如果过长的话需要另起一行。if 语句的条件若较多较长,应折行;新行以逻辑
运算符起始,与第一行 if 左括号后的第一个字符对齐;折行后,每行条件具有独立而明确
的语义。
说明: 这样做逻辑更一目了然。
if (a > b && c > d
&& e > f && h > j
&& z > x) {
}
¹1-10:(建议)多行的”=”可能的话尽量用空格对齐。
= 1;
a
ab
= 2;
abc = 3;
仅供内部使用
5
¹1-11: (强制)Switch语句中每个case的break必须和case间有 4 个空格的缩进。
case ‘A’:
= 2;
a
break;
¹1-12:(强制)初始化array如果采用多行结构时,数据项部分需要缩进,且最后一个数据项
后面的逗号不可省略。
说明:这样做在修改代码增加数据项的时候不容易出现语法错误。
$a = array(
'a' => 'b',
'b' => 'c',
'c' => 'd',
);
仅供内部使用
6
2 命名
¹2-1:(强制)全局变量以g_开头。
说明: 全局变量对代码影响很大,以g_开头变能在代码中一眼看出是全局变量。
如:
g_count;
¹2-2:(强制)常量命名使用全部大写字符,单词之间以'_'连接。
如:
PAGE_NUM
¹2-3:(强制)对于代码中的常量,必须用常量或define表示,不允许直接写在代码中。
如:
define('PAGE_NUM', 3);
¹2-4:(强制)关键字true、false、null必须小写
¹2-5: (强制)私有函数命名需加上 '_'前缀。
private function _myPrivateFunc() {
}
仅供内部使用
7
¹2-6: (强制)类method命名采用驼峰命名, 普通function采用过程函数风格命名。
如:
类 method:
public function getName() {
}
普通 function:
function show_me_the_money() {
}
2-7:(强制)文件(除了类)命名使用小写字母,单词之间以'_'连接。
如:
show_lemma.php
2-8: (强制)配置文件的名称为配置文件名 + .conf.php, 不涉及类的都小写通过”_”连接。
如:
good_version.conf.php
2-9 : (建议)类名应以大写字母开头,每个单词的首字母大写。
如:
ActionController
仅供内部使用
8