函數的三大價值
- 封裝多行代碼為單一語句
- 簡化主流程邏輯
- 構建「小應用協作的大應用」架構
PHP 函數性能特徵
用戶定義函數在 CPU/內存上相對昂貴,因 PHP 為解釋型弱類型語言,每次調用涉及符號表查找、參數複製、作用域創建等開銷。
兩大極端反模式
| 反模式 | 表現 | 後果 |
| 過度封裝 | 僅為重命名而封裝內置函數(如 function my_strlen($s){return strlen($s);}) | 增加體積與執行時間,維護惡夢 |
| 內聯濫用 | 將本應提取的邏輯硬編碼在調用處 | 代碼膨脹、重複、難以維護 |
明智策略:按需定義
- 條件:邏輯復用 ≥ 2 次 且 無內置函數滿足
- 原則:單一職責、參數正交、返回值一致、副作用可控
- 重命名:僅在語義增強時進行(如
sanitizeInput() 替代 htmlspecialchars())
可管理性 vs 性能權衡曲線

- 函數太少 → 代碼塊巨大、難維護
- 函數太多 → 調用開銷大、跳轉難追蹤
- 最佳點:核心業務邏輯封裝,工具函數庫化,模板邏輯極簡
函數設計檢查清單
- 名稱是否語義自明?
- 參數順序是否符合慣例(主體在前,選項在後)?
- 是否處理了邊界情況(null、空字符串、越界)?
- 錯誤處理:返回 false / 拋異常 / 觸發 E_USER_WARNING?
- 是否有單元測試覆蓋?
- 文檔註釋:
@param @return @throws 完整?
「好的函數像鋼筆,寫起來順手,蓋上蓋不漏墨,換墨水不換筆。」