Conditionable trait 是什麼
Illuminate\Support\Traits\Conditionable trait 為物件加入 when() 與 unless() 方法。特色是可依條件分支處理,同時延續方法鏈。
實際原始碼位於
src/Illuminate/Conditionable/Traits/Conditionable.php,並透過 Illuminate\Support\Traits\Conditionable 別名被參照。基本用法
when() — 條件為真時執行
unless() — 條件為偽時執行
unless() 是 when() 的相反。條件為偽時執行 callback。
方法鏈能持續的理由
若 callback 的回傳值為null,會回傳 $this(使用 trait 的物件)。若 callback 不回傳 null,則回傳其回傳值。
null),則回傳 $this。
不帶引數呼叫 — HigherOrderWhenProxy
以零引數呼叫when() 會回傳 HigherOrderWhenProxy,可利用此後再設定條件。
將 closure 作為值傳入
若在第 1 個引數傳入 closure,會以該 closure 的執行結果作為條件。QueryBuilder 的典型模式
使用when() 動態構建查詢是最常見的使用情境。
將 Conditionable 應用於自訂類別
只要use 該 trait 就能使用 when() / unless()。
在 Mail、Notification、Response 中的活用
when() 亦可用於郵件、通知及回應的建立。
與 tap() 的差異
tap() 與 when() 相似,但用途不同。
下一步
Collection 的 Higher Order Messages
學習
$collection->map->method() 這類語法的機制及實務用法。