PHP編碼規範

來源:互聯網
上載者:User

標籤:info   替換   hello   indent   模組   back   多個   cal   返回   

一、檔案格式

1. 對於只含有 php 代碼的檔案,我們將在檔案結尾處忽略掉 "?>" 。這是為了防止多餘的空格或者其它字元影響到代碼。
例如:
<?php
$foo = ‘foo‘;
2. 縮排應該能夠反映出代碼的邏輯結果,盡量使用四個空格,禁止使用定位字元TAB,因為這樣能夠保證有跨用戶端編程器軟體的靈活性。
例如:
if (1 == $x) {
    $indented_code = 1;
    if (1 == $new_line) {
        $more_indented_code = 1;
    }
}
3. 變數賦值必須保持相等間距和排列。
例如:
$variable = ‘demo‘;
$var      = ‘demo2‘;
4. 每行代碼長度應控制在80個字元以內,最長不超過120個字元。因為 linux 讀入檔案一般以80列為單位,就是說如果一行代碼超過80個字元,那麼系統將為此付出額外操作指令。這個雖然看起來是小問題,但是對於追求完美的程式員來說也是值得注意並遵守的規範。
5. 每行結尾不允許有多餘的空格。

二、命名規範

1. 類檔案都是以“.class.php“為尾碼,且類檔案名稱只允許字母,使用駝峰法命名,並且首字母大寫,例如:DbMysql.class.php 。
2. 配置和函數等其他類庫檔案之外的檔案一般是分別以“.inc.php“和”.php“為尾碼,且檔案名稱命名使用小寫字母和底線的方式,多個單詞之間以下 劃線分隔,例如config.inc.php , common.php,install_function.php 。
3. 確保檔案的命名和調用大小寫一致,是由於在類Unix系統上面,對大小寫是敏感的。
4. 類名和檔案名稱一致(包括上面說的大小寫一致),且類名只允許字母,例如 UserAction類的檔案命名是UserAction.class.php, InfoModel類的檔案名稱是InfoModel.class.php 。
5. 控制器類以Action為尾碼,例如 UserAction、InfoAction ,模型類以Model為尾碼,例如UserModel、InfoModel ,其他類也分別以相應分類為尾碼,例如Service 、Widget。
6. 方法名只允許由字母組成,底線是不允許的,首字母要小寫,其後每個單詞首字母要大寫,即所謂的 “駝峰法命名” 規則,且越詳細越好,應該能夠描述清楚該方法的功能,例如switchModel、findPage。
7. 屬性的命名只允許由字母組成,底線是不允許的,首字母要小寫,其後每個單詞首字母要大寫,即所謂的 “駝峰法命名” 規則,例如tablePrefix、tableName 。
8. 對於對象成員的訪問,我們必須始終使用 “get” 和 “set” 方法。例如:
class Foo
{
    protected $_testObj;
    public function getTestObj()

    {
        return $this->_testObj;
    }
    public function setTestObj($testObj)

    {
        $this->testObj = $_testObj;
    }
}
9. 當類成員方法被聲明為 private 時,必須分別以雙底線 "__"為開頭;被聲明為 protected 時,必須分別以單底線 "_" 為開頭;一般情況下的方法不含底線。例如 :
class Foo
{
    private function __example()

    {
        // ...
    }
    protected function _example()
    {
        // ...
    }
    public function example()
    {
        // ...
    }
}
10. 如果我們需要把一些經常使用的方法定義為全域函數,那麼應該把它們以靜態 (static) 的形式定義在類中。例如:
class Think
{
    // ...
    static public function autoload($classname)

    {
        // ...
    }
}
11. 被聲明為 private的類成員屬性必須由雙底線 "__" 作為開頭;被聲明為 protected 的類成員屬性必須由底線 "_" 作為開頭;而聲明為 public 的成員屬性則在任何時候都不允許含有底線。
12. 函數的命名使用小寫字母和底線的方式,且越詳細越好,應該能夠描述清楚該函數的功能,例如 get_client_ip 。
13. 當方法或函數參數不一定需要被賦值的時候,用 "null" 來代替 "false" 作為函數參數的預設值,除非該參數是 boolean 值。
14. 變數只允許由小寫字母和底線組成,且建議用描述性的變數的命名,越詳細越好,以至於像 $i 或 $n 等等都是不鼓勵使用的。
15. 類中的常量 constant 和全域範圍內常量define,只能由大寫字母和底線組成,各個單詞之間以底線分割。
16. boolean 值和 null 值都採用小寫。

三、編碼風格

1. php 代碼必須以完整的形式來定界(<?php … ?>),即不要使用php 短標籤(<? … ?>),且保證在關閉標籤後不要有任何空格。
2. 當一個字串是純文字組成的時候(即不含有變數),則必須總是以單引號(‘)作為定界符。例如:
$a = ‘Example String‘;
3. 變數替換中的變數只允許用 $+變數名 的形式。例如:
$greeting = "Hello $name, welcome back!";   // 允許
$greeting = "Hello {$name}, welcome back!"; // 允許
$greeting = "Hello ${name}, welcome back!"; // 不允許
 當用點號 "." 串連各字串的時候,字串與點號間必須用一個空格隔開,且允許把它分割成多行以增強可讀性。在這種情況下,點號 "." 必須與等號 "=" 對齊。例如:
$sql = "SELECT `id`, `name` " . " FROM `people` "
      . "WHERE `name` = ‘Susan‘ "
      . "ORDER BY `name` ASC ";
 當用 array 類型符號來構造數組的時候,必須在每個逗號之後加上一個空格來增強可讀性。例如:$sampleArray = array(1, 2, 3, ‘Think‘, ‘SNS‘);
4. 當使用 array 類型符聲明關聯陣列的時候,我們鼓勵把它分成多個行,只是我們必須同時保證每行的鍵與值的對齊,以保持美觀。例如:
$sampleArray = array(
                   ‘firstKey‘  => ‘firstValue‘,
                   ‘secondKey‘ => ‘secondValue‘
               );
5. 大括弧的開始必須在類名的下一行頂格。例如:
class Think
{
    // ...
}
6. 類中的所有代碼都必須用四個空格來進行縮排。
7. 每個 php 檔案只允許聲明一個類。在類檔案裡面寫其它代碼是允許的,但並不鼓勵這樣做。假如真要附加代碼的話,必須用空行來分隔。
8. 任何類變數的聲明都必須放在類頂部,先於任何函數的聲明。
9. 不允許用 var 符號來聲明變數,類成員變數必須以 private,protected 和 public 來聲明。其次,把類成員聲明為 public 而直接引用雖然是允許的,但通常更好的方法是使用 get 和 set 方法來訪問類成員。
10. 方法必須總是用 private,protected 或者 public 來聲明其範圍。
11. 靜態 static 方法應該聲明其範圍,且不應該再被聲明為 private 私人,而應該為 protected 或者public ,如果只是不想被子類繼承,則應該用 final 聲明它們。
12. 函數或方法的初始大括弧應該在函式宣告的下一行頂格。例如: 
function get_client_ip()
{
    // …
}
13. 在函數或方法名與參數括弧之間不允許出現多餘的空格。例如:
function get_client_ip()
{
    // …
}
14. 引用只允許定義在函數參數中,即時傳遞引用是禁止的。例如:
// 引用定義在函數參數-允許的
function defineRefInMethod(&$a)
{
    $a = ‘a‘;

defineRefInMethod($b);
echo $b; // ‘a‘
// 即時傳遞引用-禁止的
function callTimePassRef($a)
{
    $a = ‘a‘;
}
callTimePassRef(&$c);
echo $c; // ‘a‘
15. 函數或方法傳回值不可以用括弧包住,不然會降低可讀性,而且假如以後函數修改為返回引用的話,這將會拋出一個異常。
16. 鼓勵盡量使用類型提示,特別是在模組設計中。例如:
class Foo
{
    public function foo(SomeInterface $object)

   {
    }
    public function bar(array $options)
    {
    }
}
17. 函數和方法參數必須用逗號+空格來分隔。
18. 對於參數為數組的函數,參數中的數組應該分成多行以增強可讀性。例如:
threeArguments(array(1, 2, 3), 2, 3);
threeArguments(array(1, 2, 3, ‘Think‘,
                    ‘SNS‘, $a, $b, $c,
                    56.44, $d, 500), 2, 3);
19.  基於"if", "else"和"else if"的條件控制裡,我們必須用空格間隔開語句和括弧,大括弧的開始 "{" 必須與條件控制語句位於同一行,結束 "}" 必須總是獨佔一行且頂格,控制流程程內容必須用四個空格進行縮排,且不使用"elseif"。
if ($condition) {
    // ...
} else if ($_condition) {
    // ...
} else {
    // ...
}
20. 在條件控制語句的條件括弧內,必須用空格將操作符與其它元素隔開。如果遇到很長的邏輯判斷,則鼓勵用內嵌括弧來分割各個邏輯。例如:
if (($a != 2) and ($b == 1)) {
    $a = $b;
}
21. "switch" 條件控制語句中,必須用空格將待測參數與其它元素分隔開。例如:
switch ($num) {
    // …
}
22.  "switch" 語句的內容必須以四個空格縮排,"case" 條件控制的內容必須再加四個空格進行縮排。例如:
switch ($indentedSpaces) {
    case 2:
        echo "錯誤";
        break;
    case 4:
        echo "正確";
        break;
    default:
        break;
}
23. 在 "switch" 語句中應該總是包括 "default" 控制。
24. 有時候我們需要在 "case" 語境中省略掉 "break" 或 "return" ,這個時候我們必須為這些 "case" 語句加上 "// 此處無break" 注釋。例如:
switch ($numPeople) {
case 1: // 此處無break

case 2:
      break;
default:
      break;
}

PHP編碼規範

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.