PHP编码规范(代码示例)
代码范例
/*
* @(#)Cngift.php 1.82 03/06/25
*
* 开花石头编写的示例文档
* 将对编码规范做简单的示范
*
*/
require( “db.php” );
/**
* 示范用类
*
* @version 1.82 03.06.25
* @author 开花石头
*/
class Blah extends SomeClass {
/* 这个类运行时的注释写在这里 */
/** 关于变量的注释写在这里 */
static int $classVar1;
/**
* 对变量编写的多行注释写在这里
*/
static string classVar2;
/** 变量的文档注释 */
int instanceVar1;
/** 变量的文档注释 */
int[] instanceVar3;
/**
* 构造函数的注释
*/
function Blah() {
// …在这里执行…
}
/**
* …函数的文档注释…
*/
function doSomething() {
// …在这里执行…
}
/**
* …方法的注释文档..
* 多行注释
*/
public void doSomethingElse(Object someParam) {
// …在这里执行…
}
}
PHP(大括号)编码规范
大括号
在三种主要的大括号放置规则中,有两种是可以接受的,如下的第一种是最好的:
将大括号放置在关键词下方的同列处:
if (condition)
{
…
while (condition)
{
…
}
}
传统的UNIX的括号规则是,首括号与关键词同行,尾括号与关键字同列:
if (condition) {
…
while (condition) {
…
}
}
引起剧烈争论的非原则的问题可通过折衷的办法解决,两种方法任意一种都是可以接受的,然而对于大多数人来说更喜欢第一种。原因就是心理研究学习范畴的东西了。
对于更喜欢第一种还有着更多的原因。如果您使用的字符编辑器支持括号匹配功能的话(例如vi),最重要的就是有一个好的样式。为什么?我们说当你有一大块的程序而且想知道这一大块程序是在哪儿结束的话。你先移到开始的括号,按下按钮编辑器就会找到与之对应的结束括号,例如:
if (veryLongCondition && secondVeryLongCondition)
{
…
}
else if (…)
{
…
}
从一个程序块移动到另一个程序块只需要用光标和你的括号匹配键就可以了,不需找匹配的括号。
PHP编码规范之运算符”?”前的表达式
运算符”?”前的表达式
如果一个包含二元运算符的表达式出现在三元运算符” ? : “的”?”之前,那么应该给表达式添上一对圆括号。例如:
(x >= 0) ? x : -x;
PHP(返回值)编码规范
返回值
设法让你的程序结构符合目的。例如:
if (booleanExpression) {
return true;
} else {
return false;
}
应该代之以如下方法:
return booleanExpression;
类似地:
if (condition) {
return x;
}
return y;
应该写做:
return (condition ? x : y);
PHP编码规范(圆括号)
圆括号
一般而言,在含有多种运算符的表达式中使用圆括号来避免运算符优先级问题,是个好方法。即使运算符的优先级对你而言可能很清楚,但对其他人未必如此。你不能假设别的程序员和你一样清楚运算符的优先级。
if ($a == $b && $c == $d) // 错误
if (($a == $b) && ($c == $d)) // 正确
PHP编码规范(命名)
命名空间
一个唯一命名空间的前缀总是全部小写的ASCII字母并且是一个顶级域名,通常是com,edu,gov,mil,net,org,或1981年ISO 3166标准所指定的标识国家的英文双字符代码。命名空间的后续部分根据不同机构各自内部的命名规范而不尽相同。这类命名规范可能以特定目录名的组成来区分部门(department),项目(project),机器(machine),或注册名(login names),也可以按功能模块来分类。
类属性的命名
属性命名应该以字符‘m’为前缀。
前缀‘m’后采用于类命名一致的规则。
‘m’总是在名字的开头起修饰作用,就像以‘r’开头表示引用一样。
理由
前缀’m'防止类属性和方法名发生任何冲突。你的方法名和属性名经常会很类似,特别是存取元素。
例如
class NameOneTwo
{
int $mVarAbc;
int $mErrorNumber;
String $mrName;
}
PHP(变量和常量)编码规范
变量
除了变量名外,所有实例,包括类,类常量,均采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。变量名不应以下划线或美元符号开头,尽管这在语法上是允许的。
变量名应简短且富于描述。变量名的选用应该易于记忆,即,能够指出其用途。尽量避免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,它们一般用于字符型。
char $c;
int $i;
float $myWidth;
变量赋值
避免在一个语句中给多个变量赋相同的值。它很难读懂。例如:
$fooBar.fChar = $barFoo.lchar = ‘c’; // 错误
不要将赋值运算符用在容易与相等关系运算符混淆的地方。例如:
if ($c++ = $d++) { // 错误
…
}
应该写成
if (($c++ = $d++) != 0) {
…
}
不要使用内嵌(embedded)赋值运算符试图提高运行时的效率,这是编译器的工作。例如:
$d = ($a = $b + $c) + $r; // 错误
应该写成
$a = $b + $c;
$d = $a + $r;
实例变量
大小写规则和变量名相似,除了前面需要一个下划线
int $_employeeId;
String $_name;
Customer $_customer;
常量
类常量和ANSI常量的声明,应该全部大写,单词间用下划线隔开。(尽量避免ANSI常量,容易引起错误)
static final int $MIN_WIDTH = 4;
static final int $MAX_WIDTH = 999;
static final int $GET_THE_CPU = 1;
位于for循环中作为计数器值的数字常量,除了-1,0和1之外,不应被直接写入代码。
PHP编码规范(空格)
空格
下列情况应该使用空格:
- 一个紧跟着括号的关键字应该被空格分开,例如:
while ( true ) {
…
}
注意:空格不应该置于方法名与其左括号之间。这将有助于区分关键字和方法调用。
- 空白应该位于参数列表中逗号的后面
- 所有的二元运算符,除了”.”,应该使用空格将之与操作数分开。一元操作符和操作数之间不因该加空格,比如:负号(“-”)、自增(“++”)和自减(“–”)。例如:
$a += $c + $d;
$a = ( $a + $b ) / ( $c * $d );
while ( $d++ = $s++ ) {
$n++;
}
printSize( “size is ” + $foo + “\n” );
- for语句中的表达式应该被空格分开,例如:
for (expr1; expr2; expr3)
- 强制转型后应该跟一个空格,例如:
myMethod( (byte) $aNum, (int) $x );
myMethod( (int) ($cp + 5 ), ( (int) ($i + 3)) + 1 );
PHP编码规范(函数)
函数
方法名是一个动词,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。
function run();
function runFast();
function getBackground();
通常每个方法都是执行一个动作的,所以对它的命名应该清楚的说明它是做什么的:用checkForErrors()代替errorCheck(),用dumpDataToFile()代替dataFile()。这么做也可以使功能和数据成为更可区分的物体。
有时后缀名是有用的:
Max – 含义为某实体所能赋予的最大值。
Cnt – 一个运行中的计数变量的当前值。
Key – 键值。
例如:retryMax 表示最多重试次数,retryCnt 表示当前重试次数。
有时前缀名是有用的:
is – 含义为问一个关于某样事物的问题。无论何时,当人们看到Is就会知道这是一个问题。
get – 含义为取得一个数值。
set – 含义为设定一个数值
例如:isHitRetryLimit
PHP编码规范(空行)
空行
空行将逻辑相关的代码段分隔开,以提高可读性。
下列情况应该总是使用两个空行:
- 一个源文件的两个片段(section)之间
- 类声明声明之间
下列情况应该总是使用一个空行:
- 两个方法之间
- 方法内的局部变量和方法的第一条语句之间
- 块注释或单行注释之前
- 一个方法内的两个逻辑段之间,用以提高可读性

