首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 編碼規範指南:從新手到高手的進階之路

     編輯:PHP 相關知識

統一編碼風格能大幅降低維護成本、提升團隊協作效率。本文整理業界通用的 PHP 編碼規範(PSR-12 為基準),涵蓋排版、命名、註解、SQL、架構等面向。

為什麼需要編碼規範?

  • 軟體生命週期 80% 成本在維護
  • 代碼被閱讀次數遠超撰寫次數
  • 統一風格降低認知負擔,加速 Code Review
  • CI/CD 整合自動檢查,保持代碼庫整潔

核心排版規範

縮進與換行

  • **4 空格縮進**,禁用 Tab
  • 單行 ≤ 120 字元(建議 80-100)
  • 每行單一陳述式
  • 左大括號不換行(K&R 風格),右大括號獨佔一行

空格規則

  • 控制結構關鍵字後加空格:if (, foreach (
  • 運算子前後加空格:$a = $b + $c;
  • 函式呼叫無空格:foo($bar)
  • 陣列短語法:[$a, $b]、['key' => $val]
  • 類型宣告:function foo(int $bar): string

PHP 標籤

  • 純 PHP 檔案**省略結束標籤** ?>
  • 開頭 <?php 獨佔一行,後接空行

命名規範

類型慣例範例
類別/介面/特質StudlyCapsUserService, LoggerInterface
方法/函式camelCasegetUserById()
變數/屬性/參數camelCase$userName, $maxRetry
常數SCREAMING_SNAKE_CASEMAX_RETRY_COUNT
私有/保護屬性底線前綴_cache, _connection
檔案名類別名一致UserService.php

禁用拼音命名:$yongHuMing ❌ → $userName ✅

註解規範

檔案標頭

<?php
/**
 * 使用者服務類
 *
 * @package App\Services
 * @author  Team Name
 * @since   2024-01-01
 */

函式/方法 DocBlock

/**
 * 依 ID 取得使用者
 *
 * @param int $id 使用者 ID
 * @return User|null 使用者物件,不存在回傳 null
 * @throws UserNotFoundException 找不到時拋出(可選策略)
 */
public function getById(int $id): ?User
{
    // ...
}

行內註解

  • 單行:// 理由說明 放在程式碼上方
  • 避免廢話註解:$i++; // i 加 1
  • TODO/FIXMARK 標準化:// TODO: 支援多語系

函式設計原則

  • **單一職責**:一個函式只做一件事
  • **規模控制**:≤ 50 行(不含註解/空行)
  • **參數數量**:≤ 3 個,超過用 DTO/陣列/物件
  • **回傳型別**:盡可能宣告,避免混合回傳
  • **避免副作用**:純函式易測試、易推理

流程控制

  • 優先 foreach 遍歷陣列
  • switch 每個 case 以 break 結尾,或註解 // no break
  • 三元運算子僅用於簡單賦值,巢狀禁用
  • else if 寫成 elseif(單字)

字串與陣列

  • 單引號字串不解析變數,**優先使用**
  • 雙引號需用 {$var} 包裹變數
  • 陣列鍵名**必須加引號**:$arr['key'] 而非 $arr[key]
  • 字串連接:$a . ' ' . $b 兩側加空格

錯誤處理

  • 使用 try-catch 處理例外,避免 @ 抑制錯誤
  • 自訂例外繼承 Exception 或 \DomainException
  • 輸入驗證:isset()/empty()/filter_var()
  • 資源管理:try-finally 或 using 模式關閉連線/檔案

SQL 規範

  • 關鍵字大寫:SELECT, FROM, WHERE
  • 明確列出欄位,**禁用 SELECT ***
  • 參數綁定:**嚴禁字串拼接 SQL**
  • 表名/欄位名用反引號:\`users\`
  • 使用 LIMIT 避免全表掃描

工具整合

# composer.json
"require-dev": {
    "phpcs/php-cs-fixer": "^3.0",
    "phpstan/phpstan": "^1.10",
    "psalm/plugin-phpunit": "^0.16"
}

# 執行
./vendor/bin/php-cs-fixer fix --rules=@PSR12
./vendor/bin/phpstan analyse src
./vendor/bin/psalm --show-info=false

Git Hooks 自動化

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved