個(gè)人覺得,在 yii 里面,最難以明白的就是事件(event)和行為(behavior)了。這不僅僅是因?yàn)樗鼈兊母拍畋容^難明,關(guān)鍵是它們的應(yīng)用場景比較難明,不知道什么時(shí)候應(yīng)該使用事件和行為來開發(fā)。
事件
事件模型就是設(shè)計(jì)模式中的“觀察者模式”:當(dāng)對(duì)象的狀態(tài)發(fā)生了變化,那么這個(gè)對(duì)象可以將該事件通知其它對(duì)象。
為了使用事件模型,需要實(shí)現(xiàn)這三個(gè)步驟:? ? ? ? ? ? ? ? (推薦學(xué)習(xí):yii框架)
1、定義事件;2、注冊(cè)事件句柄;3、觸發(fā)事件。
為什么要做這三個(gè)步驟呢?因?yàn)閷?duì)于 PHP 本身,它的執(zhí)行過程不是以進(jìn)程化來運(yùn)行的,
所以 Yii 的事件觸發(fā)機(jī)制不會(huì)像 ActionScript 3+ 那樣,直接將觸發(fā)事件。
有人說,Yii 的事件概念跟 js 中的事件概念差不多,因?yàn)?Yii 是將事件綁定到 Yii::app() 的執(zhí)行過程中。
行為
這里先重新描述一下為什么要使用行為。
有兩種辦法可以對(duì)類添加特性:
1、直接修改這個(gè)類的代碼,添加一些成員函數(shù)和成員變量;
2、派生,通過子類來擴(kuò)展。
很明顯第二種方法更加易維護(hù)、易擴(kuò)展。但是如果需要對(duì)一個(gè)類添加多個(gè)特性(多人在不同時(shí)期),那么需要進(jìn)行多級(jí)派生,這顯然加大了維護(hù)成本。
在 Yii 里面,通過行為類綁定,組件將一個(gè)或多個(gè) CBehavior 類的成員方法和成員變量添加到自己身上,并且在不需要的時(shí)候載掉某些 CBehavior 類。
同時(shí),可以通過重寫 CBehavior::events 的方法,來實(shí)現(xiàn)對(duì)目標(biāo)類的多個(gè)事件綁定。這些事件將會(huì)在當(dāng)前行為綁定到目標(biāo)類的時(shí)候,一起被綁定上。
Yii2事件與行為總結(jié)
1)、事件用于在特定的時(shí)點(diǎn),觸發(fā)執(zhí)行預(yù)先設(shè)定的一段代碼,需要使用到事件的類,都繼承自 yii\base\Component。
2)、行為用于對(duì)類的補(bǔ)充,通過將行為綁定到一個(gè)類,可以使類具有行為本身所定義的屬性和方法,就好像類本來就有這些屬性和方法一樣。
而且不需要寫一個(gè)新的類去繼承或包含現(xiàn)有類。
以上就是yii事件和行為的區(qū)別的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)