[TOC]
# 1、缩进
使用4个空格作为缩进,而不使用tab缩进。
4个空格常被作为缩进排版的一个单位。缩进的确切解释并未详细指定(空格 vs. 制表符)。
一个制表符等于8个空格(而非4个),所以在某些编辑器中,需要特别指定一下制表符的长度为4(UltraEdit),而在某些编辑器中,会将制表符转换为空格。
# 2、大括号{}书写规则
`{` 直接跟在控制语句之后,不换行,如:
~~~
for ( $i=0;$i<$count;$i++ ) {
echo 'test';
}
~~~
# 3、小括号()和函数、关键词等
小括号、关键词和函数遵循以下规则:
a.不要把小括号和关键词紧贴在一起,要用一个空格间隔;如`if ( $a<$b ); `
b.小括号和函数名间没有空格;如`$test = date("ymdhis");`
c.除非必要,不要在``return``返回语句中使用小括号。 如`return $a;`。
# 4、=符号书写
在程序中=符号的书写遵循以下规则:
a.在=符号的两侧,均需留出一个空格;如 `$a = $b` 、`$a = 'test'`等;
b.在=符号与!、=、<、>等符号相邻时,不需留一个空格;如 `if ( $a == $b )` 、`if ( $a != $b )` 等;
c.在一个申明块,或者实现同样功能的一个块中,要求=号尽量上下对其,左边可以为了保持对齐使用多个空格,而右边要求空一个空格;如下例:
~~~
$testa = $aaa;
$testaa = $bbb;
$testaaa = $ccc;
~~~
# 5、if else swith for while等书写
对于控制结构的书写遵循以下规则:
a.在if条件判断中,如果用到常量判断条件,将常量放在等号或不等号的左边,例如:`if ( 6 == $errorNum )` ,因为如果你在等式中漏了一个等号,语法检查器会为你报错,可以很快找到错误位置,这样的写法要注意;
b.`switch`结构中必须要有`default`块;
c.在 `for` 和 `wiile` 的循环使用中,要警惕 `continue`、 `break` 的使用,避免产生类似 `goto` 的问题。
# 6、语句断行
在代码书写中,遵循以下原则:
a.尽量保证程序语句一行就是一句,而不要让一行语句太长产生折行;
b.尽量不要使一行的代码太长,一般控制在120个字符以内;
c.如果一行代码太长,请使用类似 .= 的方式断行书写;
d.对于执行数据库的sql语句操作,尽量不要在函数内写sql语句,而先用变量定义sql语句,然后在执行操作的函数中调用定义的变量。
例子:
~~~
$sql = 'SELECT username,password,address,age,postcode FROM test_t ';
$sql .= ' WHERE username=\'aaa\'';
$res = mysql_query($sql);
~~~
##7、数字
一个在源代码中使用了的赤裸裸的数字是不可思议的数字,因为包括作者,在三个月内,没人知道它的含义。例如:
~~~
if ( 22 == $foo ) {
start_thermo_nuclear_war();
} elseif ( 19 == $foo){
refund_lotso_money();
} else {
cry_cause_in_lost();
}
~~~
你应该用`define()`来给你想表示某样东西的数值一个真正的名字,而不是采用赤裸裸的数字,例如:
~~~
define('PRESIDENT_WENT_CRAZY', '22');
define('WE_GOOFED', '19');
define('THEY_DIDNT_PAY', '16');
if ( PRESIDENT_WENT_CRAZY == $foo ) {
start_thermo_nuclear_war();
} elseif ( WE_GOOFED == $foo){
refund_lotso_money();
} elseif ( THEY_DIDNT_PAY == $foo ){
infinite_loop();
} else {
cry_cause_in_lost();
}
~~~
# 8、判断
遵循以下规则:
a.不能使用 1/0 代替` true/false`,在 PHP 中,这是不相等的;
b.不要使用非零的表达式、变量或者方法直接进行 `true/false` 判断,而必须使用严格的完整 `true/false` 判断;
如:不使用 `if ( $a )` 或者 `if ( checka() )` 而使用 ``if ( FALSE != $a )`` 或者 `if ( FALSE != check() )`。
##9、避免嵌入赋值
在程序中避免下面例子中的嵌入式赋值:
不使用这样的方式:
```php
while ( $a != ( $c = getchar() ) ) {
process the character
}
```
# 10、习惯与约定
通常变量的命名应该是有意义的单词,但在循环体中临时变量采用“IN规则”。
IN规则原本来自FORTRAN,在FORTRAN中,以字母表中I~N范围内字母开头的变量默认为整型变量。循环体中一般是整型变量,故习惯用I~N字母作为循环体中的变量命名。同时,I是标识符(Identify)首字母。如下:
```php
function bubble_sort($array){
$count = count($array);
for($i=0;$i<$count; $s++){
for($j=$count-1;$j<$i;$j--){
if($array[$j]<$array[$j-1]){
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
}
}
}
return $array;
}
```