代碼樣式規範php
編碼基本規範
a、代碼必須遵照 PSR-1。sql
b、文件編碼Unicode (UTF-8) 編碼保存。同時不要使用 字節序標記(BOM)
c、代碼必須使用4個空格的縮進,而不是製表符。
d、一行代碼長度不該硬性限制;軟限制必須爲120個字符;也應當是80個字符或者更少。
二、申明相關規範數組
2.1 命名空間申明和使用
a、 ##在namespace聲明下面必須有一個空行,而且use聲明代碼塊下面也必須有一個空行
namespace frontendcontrollers;
.....空格
use Yii;
.....空格
2.2 類的申明
a、類的左花括號必須放到下一行,右花括號必須放在類主體的下一行。
b、方法的左花括號必須放在下一行,右花括號必須放在方法主體下面。
c、術語「類」指全部的類,接口( interface ) 抽象類( abstract ) 和 特性( traits )
class DbMysql
{
.....代碼
}
interface DbMysql
{
.....代碼
}
<p>abstract DbMysql
{
.....代碼
}</p>
<p>traits DbMysql
{
.....代碼
}
2.3 類的擴展和繼承
a、一個類的extends和implements關鍵詞必須和類名在同一行。
b、類的左花括號必須放在下面自成一行;右花括號必須放在類主體的後面自成一行。
class ClassName extends ParentClass implements ArrayAccess, Countable
{
.....代碼
}
c、implements一個列表能夠被拆分爲多個有一次縮進的後續行。若是這麼作,列表的第一項必需要放在下一行,而且每行必須只有一個接口。
class ClassName extends ParentClass implements
ArrayAccess,
Countable,
Serializable
{
.....代碼
}
2.4 方法申明
a、全部的屬性和方法必須有可見性(譯者注:Public, Protect, Private)聲明
b、在參數列表中,逗號以前不可有空格,逗號以後必需要有一個空格。
c、方法中有默認值的參數必須放在參數列表的最後面。
class DbMysql
{
public function getUser($arg1, &$arg2, $arg3 = [])
{
.....代碼
}
}
b、abstract和final聲明必須在可見性以前;
class DbMysql
{
final public function getUser()
{
.....代碼
}
}
c、static聲明必須在可見性以後
靜態 static 方法應該聲明其做用域,且不該該再被聲明爲 private 私有,而應該爲 protected 或者public
若是隻是不想被子類繼承,則應該用 final 聲明它們
class DbMysql
{
public static function getUser()
{
.....代碼
}
}
三、命名規範
3.1 普通變量
a. 全部字母都使用小寫;
b. 對於一個變量使用多個單詞的,使用’_'做爲每一個詞的間隔
例如:$base_dir、$red_rose_price等
3.2 局部變量
a. 全部字母使用小寫;
b. 變量使用’'開頭;
c. 多個單詞組成的局部變量名使用’'做爲每一個詞間的間隔
例子:$_base_dir、$_red_rose_price等。
3.3 全局變量
全局變量應該帶前綴’g',知道一個變量的做用域是很是重要的
例如
global $g_log_level;
global $g_log_path;
3.4 全局常量
a. 全部字母使用大寫
b. 全局變量多個單詞間使用’_'做爲間隔
例子:$BASE_DIR、$RED_ROSE_PRICE等
3.5 函數
a. 全部字母都使用小寫
b. 對於一個變量使用多個單詞的,使用’_'做爲每一個詞的間隔
c. 函數的命名建議使用動詞+名詞的方式,如get_user_img。
完成一組功能的函數放到一個文件中,存放函數的文件採用function_name.func.php命名
3.6 類
a. 以大寫字母開頭;
b. 多個單詞組成的變量名,單詞之間不用間隔,各個單詞首字母大寫。
例子:class MyClass 或class DbOracle等。
3.7 方法
a. 首字母小寫;
b. 多個單詞間不使用間隔,除第一個單詞外,其餘單詞首字母大寫
例子:function myFunction ()或function myDbOracle ()等
四、控制結構申明
4.1. if,elseif,else
a、一個if結構看起來應該像下面這樣。注意括號,空格,花括號的位置;
b、而且else和elseif和前一個主體的右花括號在同一行。
<?php
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
關鍵詞elseif應該替代else if使用以保持全部的控制關鍵詞像一個單詞。
4.2. switch,case
a、一個switch結構看起來應該像下面這樣。注意括號,空格和花括號。
b、case語句必須從switch處縮進,而且break關鍵字(或其餘停止關鍵字)必須和case主體縮進在同級。
c、若是一個非空的case主體往下落空則必須有一個相似// no break的註釋。
switch ($expr) {
case 0:
echo 'First case, with a break';
break;
case 1:
echo 'Second case, which falls through';
// no break
case 2:
case 3:
case 4:
echo 'Third case, return instead of break';
return;
default:
echo 'Default case';
break;
}
4.3. while,do while
a、一個while語句看起來應該像下面這樣。注意括號,空格和花括號的位置。
while ($expr) {
// structure body
}</p>
<p>b、一樣的,一個do while語句看起來應該像下面這樣。注意括號,空格和花括號的位置。
do {
// structure body;
} while ($expr);
4.4. for
a、一個for語句看起來應該像下面這樣。注意括號,空格和花括號的位置。
for ($i = 0; $i < 10; $i++) {
// for body
}
4.5. foreach
a、一個foreach語句看起來應該像下面這樣。注意括號,空格和花括號的位置。
foreach ($iterable as $key => $value) {
// foreach body
}
4.6. try, catch
a、一個try catch語句看起來應該像下面這樣。注意括號,空格和花括號的位置。
try {
// try body
} catch (FirstExceptionType $e) {
// catch body
} catch (OtherExceptionType $e) {
// catch body
}
五、編碼習慣
5.一、變量使用
a.全部的變量均須要先申明後使用
b.對於數組或對象,在使用一個不肯定的key時,首先進行isset()的判斷,而後再使用
例子:$var = ''; isset($val) ? $val : '';
5.二、變量的輸入輸出
a.不推薦直接使用$_GET、$_POST或者$_REQUEST獲取值
b.全部的輸入輸出都必須使用框架封裝的方法來實現
5.三、字符串相關
a.字符串儘可能使用單引號
b.若是字符串中須要使用變量,例如:$val = "tips:{$title}";
6. 閉包( 參考 )
閉包在聲明時function關鍵詞以後必須有一個空格,而且use以前也須要一個空格。
左花括號必須在同一行,右花括號必須在主體的下一行。
參數列表和變量列表的左括號以後不可有空格,其右括號以前也不可有空格。
在參數列表和變量列表中,逗號以前不可有空格,逗號以後必須有空格。
閉包帶默認值的參數必須放在參數列表後面。
一個閉包聲明看起來應該像下面這樣。注意括號,空格和花括號的位置。
$closureWithArgs = function ($arg1, $arg2) {
// body
};
$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
// body
};
參數和變量列表能夠被分紅多個帶一次縮進的後續行。若是這麼作,列表的第一項必須放在下一行,而且一行必須只放一個參數或變量。
當最終列表(無論是參數仍是變量)被分紅多行,右括號和左花括號必須夾帶一個空格放在一塊兒自成一行。
下面是一個參數和變量列表被分割成多行的示例。
$longArgs_noVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) {
// body
};
$noArgs_longVars = function () use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
$longArgs_longVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
$longArgs_shortVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use ($var1) {
// body
};
$shortArgs_longVars = function ($arg) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
注意若是在函數或者方法中把閉包做爲一個參數調用,如上格式規則一樣適用。
$foo->bar(
$arg1,
function ($arg2) use ($var1) {
// body
},
$arg3
);閉包