個人覺得,在 Yii 裡面,最難理解的就是事件(Event)和行為(behavior)了。這不僅是因為它們的概念比較難明,關鍵是它們的應用場景比較難明,不知道什麼時候應該使用事件和行為來發展。
事件
事件模型就是設計模式中的「觀察者模式」:當物件的狀態發生了變化,那麼這個物件可以將該事件通知其它物件。
為了使用事件模型,需要實現這三個步驟: (建議學習:yii架構)
#1、定義事件;2、註冊事件句柄;3、觸發事件。
為什麼要做這三個步驟呢?因為對於 PHP 本身,它的執行過程不是以進程化來運行的,
所以 Yii 的事件觸發機制不會像 ActionScript 3 那樣,直接會觸發事件。
有人說,Yii 的事件概念跟 js 中的事件概念差不多,因為 Yii 是將事件綁定到 Yii::app() 的執行過程中。
行為
這裡先重新描述為什麼要使用行為。
有兩種方法可以對類別加入特性:
1、直接修改這個類別的程式碼,加入一些成員函數和成員變數;
#2、派生,透過子類別來擴充。
很明顯第二種方法比較容易維護、易擴展。但如果需要對一個類別添加多個特性(多人在不同時期),那麼需要進行多級派生,這顯然加大了維護成本。
在 Yii 裡面,透過行為類別綁定,元件將一個或多個 CBehavior 類別的成員方法和成員變數加到自己身上,並且在不需要的時候載入掉某些 CBehavior 類別。
同時,可以透過重寫 CBehavior::events 的方法,來實現目標類別的多個事件綁定。這些事件將會在目前行為綁定到目標類別的時候,一起被綁定上。
Yii2事件與行為總結
1)、事件用於在特定的時點,觸發執行預先設定的一段程式碼,需要使用到事件的類,都繼承自yii\base\Component。
2)、行為用於對類別的補充,透過將行為綁定到一個類,可以使類別具有行為本身所定義的屬性和方法,就好像類別本來就有這些屬性和方法一樣。
而且不需要寫一個新的類別去繼承或包含現有類別。
以上是yii事件和行為的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!