PHP系列 - 8: PHP 的小知識

更新於 發佈於 閱讀時間約 5 分鐘

與上一篇 Yii 相關的文章類似,這篇文章也是整理了一些 PHP 的小筆記。由於這些內容較難各自形成完整的主題,因此統一開篇文章來記錄。

文字與變數的交織

在處理日誌(Log)或輸出資料時,我們經常會遇到長字串,其中夾雜著多個變數與條件判斷,例如:

  • 在某些情況下,需要選擇不同的變數值。
  • 在某些條件下,字串內容會動態變化。

這種寫法很容易變得雜亂,難以閱讀。

建議使用 sprintf() 來組合字串,這樣可以避免 .?:() 交錯出現,提高可讀性。例如:

$message = sprintf("使用者 %s 在 %s 進行了 %s 操作", $username, $time, $action);

用 match 簡化判斷

matchPHP 8.0 新增的語法,我們可以利用它來簡化 if-elseif 的判斷,特別適用於條件簡單且處理邏輯單純的情境。例如:

$browser = match (true) {
str_contains($agent, "MSIE 8.0") => "Internet Explorer 8.0",
str_contains($agent, "MSIE 7.0") => "Internet Explorer 7.0",
str_contains($agent, "MSIE 6.0") => "Internet Explorer 6.0",
str_contains($agent, "Firefox/3") => "Firefox 3",
str_contains($agent, "Firefox/2") => "Firefox 2",
str_contains($agent, "Chrome") => "Google Chrome",
str_contains($agent, "Safari") => "Safari",
str_contains($agent, "Opera") => "Opera",
default => substr($agent, 0, 99),
};

可以看出,在 簡單的條件匹配 中,使用 match 使得代碼更加清晰、精簡。

API 參數模組化

在開發 API 時,我們可以將 request 當作一種 Model 來處理(類似資料表的概念),這樣就不需要每次都手動取得參數,例如:$this->content['name'] 可以改為 $this->model->name

雖然兩者的差異看似不大,但這樣做有幾個好處:

  1. 方便後續依賴注入:可以直接用這個 Model 來連結其他資料表,減少重複的處理邏輯。
  2. 提升可讀性與維護性:對於其他開發者來說,可以直接查看 Model 來一次性確認所有輸入參數的名稱與類型,減少理解成本

資料庫鎖

在先前的文章資料庫系列 - 4: DB Lock中,我們曾經探討過資料庫鎖(DB Lock)。

在實際開發時,無論是新增、更新還是刪除資料時,都應該使用資料庫鎖來確保資料一致性(查詢時通常不需要)。即使當前系統的流量不大,似乎不需要鎖,但隨著業務增長,未來可能會遇到並發問題,這時候才補救就來不及了。

此外,要特別注意對同一張表的操作應使用相同的鎖,否則鎖的作用將會失效。例如:

$lockKey = "order_lock_" . $orderId;

輸出文件編碼

當我們輸出資料時(例如 Excel),經常會遇到編碼問題,導致中文顯示為亂碼。經過多種嘗試後,,我推薦一個最方便簡單的方式:

mb_convert_encoding($content, "UTF-8")

SQL 與高併發

當我們從資料庫查詢資料時,應該盡量將篩選條件或處理邏輯放入 SQL,讓查詢結果直接符合需求,而不是先取出所有資料後再進行分類或篩選。例如:

錯誤做法(先抓取所有資料,再用 PHP 過濾):

$allUsers = User::find()->all();
$activeUsers = array_filter($allUsers, fn($user) => $user->status === 'active');

正確做法(直接在 SQL 中篩選):

$activeUsers = User::find()->where(['status' => 'active'])->all();

這樣做有以下好處:

  1. 減少 PHP 的運算負擔,讓資料庫幫忙處理篩選,效能更佳。
  2. 降低高併發時的性能問題,避免一次取出過多不必要的資料,影響伺服器效能。


留言
avatar-img
留言分享你的想法!
avatar-img
林柏宇的沙龍
2會員
52內容數
test
林柏宇的沙龍的其他內容
2025/06/08
這篇文章整理了 Yii 框架的一些小技巧和筆記,包含如何取得使用者資訊、IP 地址、使用 PHPDoc 撰寫參數註解,以及如何使用 singleton 實現預設的依賴注入和取得 Session 資料等。
Thumbnail
2025/06/08
這篇文章整理了 Yii 框架的一些小技巧和筆記,包含如何取得使用者資訊、IP 地址、使用 PHPDoc 撰寫參數註解,以及如何使用 singleton 實現預設的依賴注入和取得 Session 資料等。
Thumbnail
2025/06/01
本文章介紹了 AWS CodeDeploy 的自動化部署過程,涵蓋從創建部署組、應用程式到設定部署規範文件的步驟。學習如何透過 AWS CLI 和管理控制檯來建構完整的 CICD 流程,提升應用程式的高可用性並實現持續交付。這些內容旨在幫助開發者在 AWS 環境中順利實現自動化部署。
Thumbnail
2025/06/01
本文章介紹了 AWS CodeDeploy 的自動化部署過程,涵蓋從創建部署組、應用程式到設定部署規範文件的步驟。學習如何透過 AWS CLI 和管理控制檯來建構完整的 CICD 流程,提升應用程式的高可用性並實現持續交付。這些內容旨在幫助開發者在 AWS 環境中順利實現自動化部署。
Thumbnail
2025/05/25
這篇文章繼續介紹 AWS CICD 的流程,特別是如何建立和配置 buildspec.yml 文件。內容涵蓋建構階段、環境變數設定、緩存策略及建構產物的定義等重要部分,並提供範例以助於讀者理解。進一步提升 CICD 流程的效率,是開發者與團隊的寶貴資源。
Thumbnail
2025/05/25
這篇文章繼續介紹 AWS CICD 的流程,特別是如何建立和配置 buildspec.yml 文件。內容涵蓋建構階段、環境變數設定、緩存策略及建構產物的定義等重要部分,並提供範例以助於讀者理解。進一步提升 CICD 流程的效率,是開發者與團隊的寶貴資源。
Thumbnail
看更多
你可能也想看
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
本章介紹了 PHP 中的例外處理技術,包括其語法、常見異常類型以及如何主動觸發異常訊息。我們還學習了如何自定義異常類別,以便更好地管理和處理不同類型的異常情況。通過使用例外處理,可以提高程式碼的穩定性、可讀性和可維護性,並提供更優雅的錯誤信息處理機制。
Thumbnail
本章介紹了 PHP 中的例外處理技術,包括其語法、常見異常類型以及如何主動觸發異常訊息。我們還學習了如何自定義異常類別,以便更好地管理和處理不同類型的異常情況。通過使用例外處理,可以提高程式碼的穩定性、可讀性和可維護性,並提供更優雅的錯誤信息處理機制。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
這一章節介紹了PHP的各種資料型別,包括內建型別如整數、浮點數、布爾值、字符串、數組、對象、空值和資源,並解釋了型別轉換的方式。此外,還討論了自訂型別、元組型別、集合型別、陣列型別和字典型別的實現方法。
Thumbnail
這一章節介紹了PHP的各種資料型別,包括內建型別如整數、浮點數、布爾值、字符串、數組、對象、空值和資源,並解釋了型別轉換的方式。此外,還討論了自訂型別、元組型別、集合型別、陣列型別和字典型別的實現方法。
Thumbnail
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
Thumbnail
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News