Skip to main content

什麼是 Fluent 類別

Fluent 類別是可將陣列以物件方式處理的通用工具類別。實作於 Illuminate\Support\Fluent,雖然從 Laravel 初期版本就存在,但官方文件中幾乎未提及。 內部以屬性管理陣列,透過魔術方法(__get / __set / __call)實現類似屬性的讀寫。
Laravel 11 新增了 fluent() helper,Fluent 類別也獲得強化,正是現在該加以活用的優秀類別。

建立實例

建構函式

make() 工廠方法

fluent() helper 函式

Laravel 11 新增了 fluent() helper。等同於 Fluent::make()

屬性存取

動態屬性讀寫

方法鏈

透過 __call 魔術方法,呼叫不存在的方法即可設定屬性。方法會回傳 $this,因此可以鏈式串接。
此機制讓您可以流暢的 API(Fluent Interface)取代陣列來設定值。

主要方法

get() — 以點記法存取

set() — 以點記法設定

fill() — 一次設定多個屬性

all() — 以陣列取得所有屬性

scope() — 將巢狀值轉換為新的 Fluent

如此便可將巢狀陣列視為獨立的 Fluent 物件來處理。

value() — 以 callback 動態指定預設值

陣列操作

toArray() — 轉換為陣列

getAttributes() — 直接存取內部屬性

ArrayAccess 介面

Fluent 實作了 ArrayAccess,因此可以像陣列一樣操作。

IteratorAggregate 介面

Fluent 可以用 foreach 迴圈。

JSON 處理

toJson() — 轉換為 JSON 字串

toPrettyJson() — 轉換為排版後的 JSON

JsonSerializable 介面

Fluent 實作了 JsonSerializable,可直接以 json_encode() 轉換。

狀態確認

isEmpty() / isNotEmpty()

Conditionable trait

Fluent 使用了 Conditionable trait,支援有條件的處理。
透過 when() / unless() 方法,可以流暢地寫出依條件決定的設定。

Macroable trait

Fluent 也使用了 Macroable trait,可動態新增方法。

實務使用情境

API Response Builder

Config Builder

請求參數的驗證與轉換

Model 與 Fluent 的組合

表單資料的正規化

與其他類別的比較

Fluent vs Array

Fluent vs Model

內部實作細節

若未註冊 macro,__call 方法會將方法名稱作為屬性 key 為屬性設值,並回傳 $this。這使得方法鏈成為可能。
Fluent 使用下列 trait,各自提供不同功能:
  • Conditionable — 以 when() / unless() 進行有條件的處理
  • InteractsWithDatadata() 等資料操作方法
  • Macroable — 動態新增方法

下一步

Collection 類別

深入處理多元素的 Collection 類別。

Conditionable trait

學習流暢寫出有條件處理的 Conditionable trait。

Macroable trait

學習為既有類別動態新增方法的 Macroable trait。
最後修改於 2026年8月2日