一起网PHP编码规范(征求意见稿)
部门: 系统平台部
撰写人:李勇
日期: 2008-12-4?
目录
一起网PHP编码规范(征求意见稿) 1
一、 绪论 1
1) 引言 1
2) 适用范围 1
3) 目标 1
二、 文件格式 1
1) 开始与结束标识 1
2) 缩进 1
3) 行长 1
4) 行结束标识 1
三、 命名约定 1
1) 文件名称 1
2) 类名称 1
3) 全局函数名称 2
4) 类方法名称 2
5) 常量名称 2
6) 变量名称 2
四、 编码风格 2
1) 字符串 2
2) 数组索引 3
3) 类变量作用域 3
4) 类方法作用域 3
5) 方法及函数的参数 3
6) 条件语句 3
7) 分支语句 3
8) 注释 3
9) 文件包含 3
10) 路径分隔符 4
11) 变量 4
12) 类变量 4
13) 全局变量 4
14) 代码分解 4
15) 条件判断 4
16) 错误消息 4
17) 行尾空格 4
一、 绪论
1) 引言
本规范基于Zend Php编码规范,针对海量公司一起网的实际情况进行适当修改。关于本规范的讨论请参考
2) 适用范围
仅适用于海量公司一起网项目开发人员。
3) 目标
减少编码错误,改善代码的可读性,便于功能扩展及维护。
二、 文件格式
1) 开始与结束标识
开始标识必须使用长标识“")是不允许存在的。缩进
2) 缩进
缩进由四个空格组成,禁止使用制表符 TAB 。
3) 行长
每行代码尽量少于80字符,最大不可超过120字符。
4) 行结束标识
行结束标志遵循 Unix 文本文件的约定,行必需以单个换行符(LF)结束。换行符在文件中表示为 10,或16进制的 0x0A。 不要使用 苹果操作系统的回车(0x0D)或 Windows 电脑的回车换行组合如(0x0D,0x0A)。
三、 命名约定
1) 文件名称
(1) 所有文件名都使用小写字母与数字的组合,不使用大写字母以及-(中划线),_(下划线);
(2) 类文件后缀:.class.php
(3) 全局函数包文件后缀:.func.php
(4) 配置文件后缀:.conf.php
(5) 模板文件后缀:.tpl.php
(6) 全局常量及变量定义文件后缀:.inc.php
(7) 语言文件后缀:.lang.php
2) 类名称
(1) 一个类文件中应仅包含一个类的定义,同时不包含任何不属于类定义的内容
(2) 类文件名应与类名相一致(此处将有一个例外,我们在新版平台群组中讨论)
(3) 类名应仅由字母和数字组成
(4) 类名首字母应大写,以便与变量,常量相区分.
(5) 如果类名由多个单词组成,每个单词的首字母应大写。连续的大写字母是不允许的,例如 “CreatePDF” 是不允许的,而 "CreatePdf" 是可接受的。
3) 全局函数名称
(1) 函数名只包含字母数字字符,下划线是不允许的。数字是允许的但大多数情况下不鼓励。
(2) 函数名总是以小写开头,当函数名包含多个单词,每个子的首字母必须大写,这就是所谓的 “驼峰” 格式。
(3) 尽可能将全局函数封装到静态类里。
(4) 尽可能使用"宾-谓"或“主-谓”方式,即以要操作的数据或发出操作的数据为首部,例:图片旋转的方法,应命名为"imageRotate",而不是"rotateImage"
4) 类方法名称
(1) 类方法的命名原则与函数命名原则是相同的
(2) 实例或静态变量的访问器总是以 "get" 或 "set" 为前缀
(3) 判断方法以is或has为前缀.
(4) 类方法名称中不需要重复类名例:Image类中的旋转方法,应命名为rotate,而不是imageRotate
5) 常量名称
(1) 尽可能不使用常量,而是以类常量代替
(2) 常量包含数字字母字符和下划线,数字允许作为常量名。
(3) 常量名的所有字母必须大写。
(4) 常量中的单词必须以下划线分隔,例如可以这样 EMBED_SUPPRESS_EMBED_EXCEPTION 但不许这样 EMBED_SUPPRESSEMBEDEXCEPTION。
6) 变量名称
(1) 变量只包含数字字母字符,大多数情况下不鼓励使用数字,下划线不接受。
(2) 变量名总以小写字母开头并遵循“驼峰式”命名约定。
(3) 除非在小循环里,不鼓励使用简洁的名字如 "$i" 和 "$n"
(4) 如果一个循环超过 一屏(约20-30行代码),循环变量名必须有个具有描述意义的名字,而不应使用$i,$n之类的简洁名称。
(5) 嵌套循环的循环变量,应有明确的描述意义(纯数学计算的多层循环例外)
四、 编码风格
1) 字符串
(1) 当字符串是文字(不包含变量),应当用单引号来括起来: $a = 'Example String';
(2)
当文字字符串包含单引号(apostrophe )就用双引号括起来,特别在 SQL 语句中有用: $sql = "SELECT `id`,
`name` from `people` WHERE `name`='Fred' OR `name`='Susan'";
(3) 尽可能不在字符串中进行变量替换
(4) 必须替换时,可使用以下形式
$greeting = "Hello $name, welcome back!";
$greeting = "Hello {$name}, welcome back!";
但不允许使用以下形式:
$greeting = "Hello ${name}, welcome back!";
(5) 如果需要输出或使用""或"?>",例如输出XML文件头时,应使用"<" . "?xml…"方式将尖括号与问号分离
2) 数组索引
当数组使用数字作为索引时,禁止使用负值,数字索引从0开始。
3) 类变量作用域
类变量必须明确说明作用域(public,private,protected)。直接访问 public 变量是允许的但不鼓励,最好使用访问器 (set/get)
类变量不允许使用var说明
4) 类方法作用域
所有类方法必须指明作用域:public,protected,private
5) 方法及函数的参数
(1) 参数中不允许使用引用
(2) 不允许使用传出参数,所有返回值由return返回,可以返回数组或对象
(3) 当需要返回-1之类代码错误的代码时,应使用异常机制抛出一个定制的异常
(4) 参数类型如果是对象或数组,应在参数列表中明确指明:
public function funcFirst(array paramArray,CarClass paramCar).....
6) 条件语句
当条件表达式中有常量时,应将常量放置在操作符的左部:if ( 6 == $errorNum ) ...
条件成立与条件不成立代码段都必须使用花括号包含,即使只有一句代码。换行格式如下:
If(condition){
条件成立代码段
}else{
条件不成立代码段
}
7) 分支语句
必须有缺省检查(default),如果分支语句不应到达缺少检查代码段,应抛出一个定制的异常
每个case都应有break结束,为了区别于 bug,任何 case 语句中,所有不写 break or return 的地方应当有一个注释来表明 break 是故意忽略的
8) 注释
(1) 所有注释尽可能使用中文书写
(2) 每个文件顶部必须包含文件级注释,包括原始开发者,修改者,修改日期,文件中主要内容的名称
(3) 每个类必须包含类注释,其中包括所有公开属性及方法的名称,可能抛出的异常的列表
(4) 每个方法必须包含方法注释,其中包括方法的作用,参数的类型及意义,复杂结构参数应举例;包括返回值的类型,复杂结构应举例;可能报出的异常的列表
(5) 每个类变量必须包含变量注释,可以是行尾注释,包括变量类型及意义,复杂结构应举例
(6) 数据算法代码段必须书写段注释,可以是单行或多行注释
(7) 代码中不允许出现被注释掉的代码及代码段
9) 文件包含
文件名称必须是小写字母,与文件命名规则相同
包含调用程序文件,请使用require_once,以避免可能的重复包含问题;此处有一个例外,将在新版平台群组中讨论(配置文件的读取部分)
10) 路径分隔符
路径分隔符统一使用"/",不允许使用"\"
11) 变量
任何变量在进行计算、显示或存储前必需进行初使化,例如:
$number = 0; //数值型初始化
$string = ‘’; //字符串初始化
$array = array(); //数组初始化
空对象必须使用new stdClass()生成
12) 类变量
任何类变量必须在类的所有方法之前定义,并注释其含义
13) 全局变量
尽可能避免使用全局变量,必须使用的情况下,不再使用的变量应及时使用unset销毁。
14) 代码分解
一段代码中,如果缩进超过4层,可以考虑将代码分解
一个方法或函数,代码如果超出一屏,可以考虑将代码分解为多个函数
超过3行,实现相同功能的代码可以考虑使用单独的方法或函数实现
15) 条件判断
判断一个无法确定(不知道是否已被赋值)的变量时,可用empty()或isset(),而不要直接使用if($switch)的形式,除非你确切的知道此变量一定已经被初始化并赋值。
16) 错误消息
在软件开发和调试阶段,请使用error_reporting(E_ALL)输出所有notice,warning,error,并尽可能解决所有级别的消息
17) 行尾空格
代码行末尾不允许有空格
阅读(497) | 评论(0) | 转发(0) |