有哪些PHP架構使用了traits,它們用traits處理哪些問題?
來源:互聯網
上載者:User
回複內容:
laravel 架構大量使用了traits. 簡單舉幾個例子
在Eloquent中使用了trait 。然後在model初始化的時候,有個boot方法,會自動判斷當前的類用了哪些trait。然後得到一個數組。程式會遍曆這個數組,尋找有沒有符合 "bootTraitName"的方法(在trait中定義),如果有就執行。
Eloquent用這種方法,在初始化一個model的時候,就可以做許多如事件之類的自動載入。在它內建的功能中,softDelete就是這樣做的。簡單來說,use了softDelete的model,會在boot的時候自動執行bootSoftDelete,然後該model所有的查詢都預設加入一個判斷deleted_at 欄位的環節,以只調取未被刪除的資料。
這種做法提供了很多便利(設想載入一個cachable的trait,每次boot的時候,就給model添加一個事件,一旦某條記錄進行了修改,就自動產生一個緩衝)。
trait在laravel的其它情境中也經常使用。例如User模型,是Laravel用來做身分識別驗證的驅動。與身分識別驗證的相關方法就是用一個trait來載入的。還有laravel開箱內建的AuthController,也把找回密碼等功能做成了trait。這樣當我們需要換別的控制器做驗證驅動,只要寫一行use 代碼,就自動得到了相關方法。
laravel使用trait還有一個比較典型的,就是dispatch。主要在laravel的controller中調用了這個trait。這樣laravel的控制器就可以用$this->dispatch() 直接來調度任務。不僅如此,任何一個類只要use了這個DispatchJob的trait,都能用同樣的調度方法(其實就是用app()得到了一個dispatch的單例)
不知道上述回答是否令題主滿意。把traits當model用,不知道有問題沒?
現在還沒這樣做過.