手寫 SQL 易導致注入、語法錯誤、維護困難。建立通用 insert_record()、update_record() 等方法,自動處理欄位對應、轉義與錯誤處理。
將動態頁面渲染結果存為靜態 HTML/JSON 檔案,下次請求直接讀取檔案,大幅降低 PHP 處理時間與 MySQL 連線數。
檔案型 Session 無法支援叢集部署。資料庫 Session 可跨伺服器共享,並能實現「同帳號單點登入」、「精準在線用戶統計」等功能。
改用:define() 常數、單例模式、依賴注入容器、類別靜態屬性。
<head><base href="https://example.com/store/"></head> <body><img src="happy.jpg"><a href="products/ipad.php">iPad</a></body>
所有相對連結自動基於 base href 解析,多目錄專案維護單一導航模板。
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT);
保留致命錯誤(E_ERROR、E_PARSE)顯示,隱藏警告/通知。
strtotime('0000-00-00') 在 64 位元回傳負整數,32 位元回傳 false。跨平台部署時需測試時間、整數運算相關邏輯。
外部系統呼叫(資料庫查詢、cURL、Socket、System 指令)不受 set_time_limit 控制。長時間任務應改用 Queue + Worker 機制。
mpdf - HTML 轉 PDFPhpSpreadsheet - Excel 讀寫PHPMailer - 郵件發送pChart - 圖表產生CodeIgniter、Laravel、Yii 等框架強制分離關注點,內建驗證、快取、遷移、安全機制,團隊協作效率高。
定期查閱 phpbench,了解微小語法差異對效能的影響。閱讀開源專案原始碼、使用 Linux 開發環境。
使用 index.php?page=home 而非建立多個獨立 PHP 檔案,集中路由分發、權限檢查、模板渲染。
$action = $_REQUEST['action'] ?? 0;
涵蓋 GET/POST/COOKIE,簡化參數取得(注意安全性:明確來源時優用 $_GET/$_POST)。
最直接查看變數型別與結構的工具,配合 die() 即時中斷。
模板引擎分離業務邏輯與 HTML,前後端並行開發,維護性大幅提升。
資料庫連線資訊、API 金鑰、系統常數集中管理,避免分散在各處。
// index.php
define('APP_ENTRY', true);
// 其他檔案頂部
if (!defined('APP_ENTRY')) die('Access Denied');
防止核心邏輯檔案被直接存取。
封裝 query()、execute()、fetchAll(),統一錯誤處理、慢查詢日誌、參數綁定。
// 控制器僅負責接收參數、呼叫服務、回應 $service = new MessageService(); $service->display($params);
熟練 JOIN、子查詢、索引優化。所有輸入經 sanitizeInput() 驗證後再進 SQL。
function getSmarty() {
static $instance = null;
if ($instance === null) $instance = new Smarty();
return $instance;
}
header('Location: url') - 最標準,需在輸出前呼叫window.location.href - 已有輸出時備用使用 get_browser() (需 browscap.ini) 或成熟套件 jenssegers/agent,勿自寫正則。
維護完整 $mime_types 陣列供 header() 使用。簡易 CSV/TSV 輸出只需正確 Content-Type 與 Tab/換行分隔。