[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;
}
```
????