個人覺得,在 YII 里面,最難以明白的就是事件(Event)和行為(behavior)了。這不僅僅是因為它們的概念比較難明,關鍵是它們的應用場景比較難明,不知道什么時候應該使用事件和行為來開發。
事件
事件模型就是設計模式中的“觀察者模式”:當對象的狀態發生了變化,那么這個對象可以將該事件通知其它對象。
為了使用事件模型,需要實現這三個步驟:? ? ? ? ? ? ? ? (推薦學習:yii框架)
1、定義事件;2、注冊事件句柄;3、觸發事件。
為什么要做這三個步驟呢?因為對于 php 本身,它的執行過程不是以進程化來運行的,
所以 Yii 的事件觸發機制不會像 actionscript 3+ 那樣,直接將觸發事件。
有人說,Yii 的事件概念跟 JS 中的事件概念差不多,因為 Yii 是將事件綁定到 Yii::app() 的執行過程中。
行為
這里先重新描述一下為什么要使用行為。
有兩種辦法可以對類添加特性:
2、派生,通過子類來擴展。
很明顯第二種方法更加易維護、易擴展。但是如果需要對一個類添加多個特性(多人在不同時期),那么需要進行多級派生,這顯然加大了維護成本。
在 Yii 里面,通過行為類綁定,組件將一個或多個 CBehavior 類的成員方法和成員變量添加到自己身上,并且在不需要的時候載掉某些 CBehavior 類。
同時,可以通過重寫 CBehavior::events 的方法,來實現對目標類的多個事件綁定。這些事件將會在當前行為綁定到目標類的時候,一起被綁定上。
Yii2事件與行為總結
1)、事件用于在特定的時點,觸發執行預先設定的一段代碼,需要使用到事件的類,都繼承自 yiibaseComponent。
2)、行為用于對類的補充,通過將行為綁定到一個類,可以使類具有行為本身所定義的屬性和方法,就好像類本來就有這些屬性和方法一樣。
而且不需要寫一個新的類去繼承或包含現有類。