如何從「能跑通」進化為「優秀的 PHP 開發者」?答案不在框架選型、不在設計模式背誦,而在於內化三條核心準則:**懶惰是金、編寫漂亮的代碼、追求程序運行速度而非編寫速度**。本文結合 PHP 生態特性,將這三條準則拆解為可落地的工程實踐。
「懶惰」不是偷懶,是**拒絕重複造輪子**、**拒絕手工重複勞動**。
PHP 擁有全球最活躍的開源生態:
doctrine/dbal、illuminate/database(Eloquent)guzzlehttp/guzzle、symfony/http-clientsymfony/validator、respect/validationmonolog/monolog(PSR-3 標準)symfony/cache、laminas/laminas-cache(PSR-16)symfony/messenger、laravel/queue原則:業務代碼只寫「業務邏輯」,通用基礎設施全部 Composer 引入。
將高頻片段封裝為 Composer 包(my/utils),典型收錄:
setTime(0,0); }
專案中 composer require my/utils,隨時 use function My\Utils\Arr\array_get;。
| 舊文提及 | 現代最佳實踐 |
|---|---|
| 通用 DB 類 | doctrine/dbal + Repository 模式 |
變量調試 ss_as_string | symfony/var-dumper dump($var)、Xdebug + IDE |
| Log 級別控制 | monolog/monolog + Processor/Handler 鏈 |
| 速度測試函數 | phpbench/phpbench、Blackfire、Xhprof、hrtime(true) |
| SQL 耗時記錄 | DBAL SQLLogger、Laravel DB::listen() |
反模式:Controller 直接 echo HTML、SQL 混雜在模板中。
正模式:
收益:模板可由前端工程師維護,後台重構不影響界面,單元測試覆蓋業務核心。
include_once 手工管理,**全面擁抱 Composer PSR-4 自動加載**。composer require my/core。auto_prepend_file 全局污染,顯式依賴優於隱式魔法。UserRegisterService 不發郵件,發郵件交給 Mailer)。CacheInterface 而非 RedisCache)。readonly 屬性(PHP 8.1+),杜絕副作用。
<div class="card">
<h2>= htmlspecialchars($title) ?></h2>
<p>= htmlspecialchars($desc) ?></p>
</div>
原理:PHP 是模板引擎本身, 切換開銷極小,避免字串拼接內存分配。
// 無正則需求時
str_replace(['<i>', '</i>'], ['<em>', '</em>'], $html); // 單次遍歷
// 有正則需求時
preg_replace('/<\/?i>/i', fn($m) => $m[0] === '<i>' ? '<em>' : '</em>', $html);
$sql = 'SELECT * FROM users WHERE id = ?'; // 單引號:無解析開銷
$msg = "User {$user->name} logged in at " . date('H:i:s'); // 雙引號:僅在需插值時用
WHERE、ORDER BY、JOIN ON 列建立組合索引。TTL + 隨機抖動 防雪崩。| 函數 | 特性 | 建議 |
|---|---|---|
include | 有條件包含、返回值可捕獲 | 動態包含首選 |
require | 無條件、失敗致命錯誤 | 核心依賴、啟動階段 |
echo | 無返回值、多參數、速度略快 | 輸出首選 |
print | 返回 1、單參數、可用於表達式 | 極少用 |
phpstan、psalm(CI 必跑)blackfire.io、xhprof、spiral/roadrunner 內建指標phpbench/phpbench 寫性能回歸測試opcache.enable=1、opcache.jit=1255(PHP 8+ JIT)| 週次 | 重點動作 | 產出 |
|---|---|---|
| 第 1 週 | 接手專案審視 composer.json,移除 3 個可替換為開源庫的自造輪子 | 依賴瘦身報告 |
| 第 2 週 | 抽離 5 個高頻工具函數到 my/utils,發布私有包 | 通用庫 v1.0 |
| 第 3 週 | 重構 1 個混雜邏輯的 Controller 為 Service + 模板 | 乾淨的 Controller |
| 持續 | 每次 Code Review 以「三大準則」為檢查清單 | 團隊文化沉澱 |
「萬事開頭難,只要有付出就會有回報」。將**懶惰(復用)、漂亮(分層)、快(性能)**內化為肌肉記憶,你就已經超越了 80% 只會「寫出功能」的 PHPer。