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

高質量 PHP 代碼 50 個實用技巧(下):第 26-50 條

     編輯:PHP 綜合知識

26. 避免手寫 SQL,封裝資料存取層

手寫 SQL 易導致注入、語法錯誤、維護困難。建立通用 insert_record()、update_record() 等方法,自動處理欄位對應、轉義與錯誤處理。

27. 資料庫內容靜態化快取

將動態頁面渲染結果存為靜態 HTML/JSON 檔案,下次請求直接讀取檔案,大幅降低 PHP 處理時間與 MySQL 連線數。

28. Session 存入資料庫

檔案型 Session 無法支援叢集部署。資料庫 Session 可跨伺服器共享,並能實現「同帳號單點登入」、「精準在線用戶統計」等功能。

29. 拒絕全域變數

改用:define() 常數、單例模式、依賴注入容器、類別靜態屬性。

30. 善用 <base> 標籤簡化相對路徑

<head><base href="https://example.com/store/"></head>
<body><img src="happy.jpg"><a href="products/ipad.php">iPad</a></body>

所有相對連結自動基於 base href 解析,多目錄專案維護單一導航模板。

31. 永不關閉錯誤回報

ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT);

保留致命錯誤(E_ERROR、E_PARSE)顯示,隱藏警告/通知。

32. 注意 32/64 位元平台差異

strtotime('0000-00-00') 在 64 位元回傳負整數,32 位元回傳 false。跨平台部署時需測試時間、整數運算相關邏輯。

33. 不要過度依賴 set_time_limit()

外部系統呼叫(資料庫查詢、cURL、Socket、System 指令)不受 set_time_limit 控制。長時間任務應改用 Queue + Worker 機制。

34. 善用成熟擴展套件

  • mpdf - HTML 轉 PDF
  • PhpSpreadsheet - Excel 讀寫
  • PHPMailer - 郵件發送
  • pChart - 圖表產生

35. 採用 MVC 框架

CodeIgniter、Laravel、Yii 等框架強制分離關注點,內建驗證、快取、遷移、安全機制,團隊協作效率高。

36. 關注效能基準測試

定期查閱 phpbench,了解微小語法差異對效能的影響。閱讀開源專案原始碼、使用 Linux 開發環境。

37. 索引頁面採用單一入口模式

使用 index.php?page=home 而非建立多個獨立 PHP 檔案,集中路由分發、權限檢查、模板渲染。

38. 使用 $_REQUEST 統一取得輸入

$action = $_REQUEST['action'] ?? 0;

涵蓋 GET/POST/COOKIE,簡化參數取得(注意安全性:明確來源時優用 $_GET/$_POST)。

39. 善用 var_dump() 除錯

最直接查看變數型別與結構的工具,配合 die() 即時中斷。

40. PHP 處理邏輯,Smarty 處理視圖

模板引擎分離業務邏輯與 HTML,前後端並行開發,維護性大幅提升。

41. 全域設定集中於 config.php

資料庫連線資訊、API 金鑰、系統常數集中管理,避免分散在各處。

42. 入口檔案定義常數,其他檔案檢查

// index.php
define('APP_ENTRY', true);

// 其他檔案頂部
if (!defined('APP_ENTRY')) die('Access Denied');

防止核心邏輯檔案被直接存取。

43. 建立資料庫操作類別

封裝 query()、execute()、fetchAll(),統一錯誤處理、慢查詢日誌、參數綁定。

44. 控制器薄、服務層厚

// 控制器僅負責接收參數、呼叫服務、回應
$service = new MessageService();
$service->display($params);

45. 精通 SQL 與輸入清理

熟練 JOIN、子查詢、索引優化。所有輸入經 sanitizeInput() 驗證後再進 SQL。

46. 單例模式管理共享資源

function getSmarty() {
    static $instance = null;
    if ($instance === null) $instance = new Smarty();
    return $instance;
}

47. 三種重導向方式

  1. header('Location: url') - 最標準,需在輸出前呼叫
  2. JS window.location.href - 已有輸出時備用
  3. Meta Refresh - 最後手段

48-49. 解析 User-Agent 取得瀏覽器/作業系統

使用 get_browser() (需 browscap.ini) 或成熟套件 jenssegers/agent,勿自寫正則。

50. MIME 類型對照表與簡易 Excel 輸出

維護完整 $mime_types 陣列供 header() 使用。簡易 CSV/TSV 輸出只需正確 Content-Type 與 Tab/換行分隔。

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