開發環境與基礎習慣 (1-13)
- 以 PHP 手冊為聖經:
php.net 文檔最權威,閱讀原文養成習慣。
- 開發期開啟錯誤報告:
error_reporting(E_ALL); ini_set('display_errors', 1); 捕捉 Notice/Warning。上線前關閉顯示,改記錄日誌。
- 使用現代 IDE:PHPStorm、VS Code (PHP Intelephense)、NetBeans。代碼補全、重構、除錯、靜態分析一站式。
- 嘗試框架:Laravel、Symfony、ThinkPHP、CodeIgniter。學習 MVC、依賴注入、ORM、中介軟體等現代模式。
- 遵循 DRY 原則:Don't Repeat Yourself。提取共用邏輯為函數/類/Service,減少複製貼上。
- 統一縮進與編碼風格:4 空格、PSR-12、
.editorconfig 專案共享。可讀性 = 可維護性。
- 分層架構:Controller/Service/Repository、或 Domain/Application/Infrastructure。關注點分離。
- 使用完整標籤:
<?php ?>,禁用 short_open_tag,避免 XML 衝突、可移植性。
- 有意義命名:變數
$userCount 不用 $uc,類 UserService 不用 Class1,風格一致 (camelCase/snake_case)。
- 註解要說「為什麼」:複雜演算法、業務規則、待辦 (TODO/FIXME) 必須註解。自述性代碼減少無謂註解。
- 本地整合環境:Docker (推薦)、Laravel Valet、WAMP/MAMP/XAMPP。版本一致性、隔離性。
- 設定腳本執行時間上限:
set_time_limit(300) 或 ini_set('max_execution_time', 300)。CLI 長任務用 0 (無限制)。
- 擁抱 OOP:封裝、繼承、多態、介面、SOLID 原則。但別過度設計,簡單場景函數式也可。
語言特性與安全 (14-20)
- 雙引號 vs 單引號:雙引號解析變數/跳脫,單引號字面量、微快。明確選擇。
- 勿將 phpinfo() 放公開目錄:洩露伺服器資訊,上線前刪除或限制存取。
- 永遠不信任用戶輸入:$_GET/POST/COOKIE/FILES/REQUEST/SERVER 全是輸入源。驗證、過濾、轉義、參數化查詢。
- 密碼加鹽哈希儲存:
password_hash($pwd, PASSWORD_BCRYPT) / PASSWORD_ARGON2ID (PHP 7.2+)。**禁用 MD5/SHA1**。
- 視覺化資料庫設計:MySQL Workbench、DBDiagram.io、dbForge。ER 圖同步遷移腳本。
- 輸出緩衝控制:
ob_start('ob_gzhandler') 啟用 GZIP 壓縮,ob_end_flush() 結束。注意輸出前不得有輸出。
- 防 SQL 注入:預處理語句:
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([$_GET['id']]); // 參數化,徹底分離代碼與數據
進階模式與效能 (21-32)
- 嘗試 ORM:Eloquent、Doctrine、Propel。物件關係映射減少手寫 SQL,但需理解 N+1、延遲載入陷阱。
- 資料庫驅動頁面快取:檔案快取 +
filemtime 過期判斷,或 Redis/Memcached。
- 使用快取系統:APCu (單機)、Redis (分散式、資料結構豐富)、Memcached (簡單 K-V)、OPcache (Bytecode 快取,必開)。
- 驗證 Cookie 資料:同樣視為不可信輸入,
htmlspecialchars() 輸出、簽名驗證防竄改。
- 靜態檔案快取 / 模板引擎快取:Twig、Blade、Smarty 內建編譯/內容快取。
- 程式碼分析:Xdebug Profiling、Blackfire、PHPStan/Psalm 靜態分析、PHP_CodeSniffer 風格檢查。
- 遵循編碼標準:PSR-1/12、團隊約定。
composer require squizlabs/php_codesniffer 自動檢查。
- 函數移出迴圈:迴圈內不定義函數、不重複計算不變量、不重複 new 物件。提升效能、減少 GC 壓力。
- 避免不必要的變數複製:PHP 為 Copy-on-Write,**複製變數不複製內容**,寫入時才分離。
$a = $bigArray; $a[0]=1; 才觸發複製。但為清晰仍建議直接用 $bigArray[0]。
- 升級最新 PHP 版本:PHP 8.2/8.3 效能提升 10-20%、新功能 (readonly、DNF 型別、屬性掛鉤)、安全修補。
- 減少資料庫查詢次數:Eager Loading、JOIN、批次查詢、快取、物化視圖。
- 勇敢提問:Stack Overflow、Laracasts、PHP 官方郵件列表、Discord/Slack 社群。提問前先搜尋、提供 MCVE (最小可重現範例)。
總結
這 32 條涵蓋環境、習慣、語言、安全、架構、效能、工具、職涯。**循序漸進落地**,每次專注改善 1-2 點,長期複利效應驚人。記住:**代碼是寫給人看的,順便能在機器上跑。**