vocus logo

方格子 vocus

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
林柏宇的沙龍
2會員
57內容數
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
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, 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