摘要:事件可以將自定義代碼注入到現(xiàn)有代碼中的特定執(zhí)行點。在處理復(fù)雜任務(wù)時,事件能很好地起到解耦的作用。
事件可以將自定義代碼“注入”到現(xiàn)有代碼中的特定執(zhí)行點。 附加自定義代碼到某個事件,當這個事件被觸發(fā)時,這些代碼就會自動執(zhí)行。
在處理復(fù)雜任務(wù)時,事件能很好地起到解耦的作用。事件相對于硬編碼的方式來說也增加了服務(wù)器資源開銷,所以比較建議在任務(wù)較為復(fù)雜時使用事件!
以下是實例代碼,代碼中有詳細注釋:
控制器registerEventHandler(); } /** * 事件注冊 */ private function registerEventHandler(){ //事件處理類 $msgHandler = new MsgHandler(); //綁定事件時,可以傳入第三個參數(shù)。該參數(shù)值將會保存到Event類的data屬性中 $this->on(self::BEFORE_SEND,[$msgHandler,"beforeSendMsg"],"who"); $this->on(self::AFTER_SEND,[$msgHandler,"afterSendMsg"]); } /** * 測試用的方法 */ public function actionIndex(){ //發(fā)送信息前的事件類 $msgBefore = new MsgBeforeEvent(); $msgBefore->date = date("Y-m-d H:i:s",time()); //觸發(fā)發(fā)送信息前的事件,傳入事件類的實例對象,這里的對象充當了保存臨時數(shù)據(jù)的角色 $this->trigger(self::BEFORE_SEND,$msgBefore); //假設(shè)這里是個較為復(fù)雜的任務(wù) echo "發(fā)送信息... "; //任務(wù)執(zhí)行完畢后,調(diào)用發(fā)送信息后的事件 $msgAfter = new MsgAfterEvent(); $msgAfter->from = "Jack"; $msgAfter->to = "Lucy"; $msgAfter->message = "Awesome"; //觸發(fā)發(fā)送信息后的事件 $this->trigger(self::AFTER_SEND,$msgAfter); } }事件處理類
個人覺得可以直接放在models目錄下,如果不需要用到數(shù)據(jù)庫操作,可以考慮直接繼承Model
date.",extraMsg:".$event->data." "; //寫入文件中 file_put_contents("log.txt",$logContent,FILE_APPEND); } /** * 處理發(fā)送信息后的事件 * @param MsgAfterEvent $event */ public function afterSendMsg(MsgAfterEvent $event){ /** * 從event中讀取數(shù)據(jù) */ $logContent = "AFTER!".$event->from."發(fā)送給".$event->to.",內(nèi)容如下:".$event->message." "; file_put_contents("log.txt",$logContent,FILE_APPEND); } }消息發(fā)送前的事件類
可以放到models目錄下
消息發(fā)送后的事件類可以放到models目錄下
處理結(jié)果運行控制器中的index方法后,在log.txt文件中得到如下結(jié)果
BEFORE:2017-11-08 14:10:07,extraMsg:who AFTER!Jack發(fā)送給Lucy,內(nèi)容如下:Awesome
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/26044.html
摘要:全局級別利用實例在整個應(yīng)用的生命周期中全局可訪問的特性,來實現(xiàn)這個全局事件的。類級別通過維護類的屬性數(shù)組,觸發(fā)事件時通過類名和事件名稱取到當前類以及父類的數(shù)據(jù),再通過函數(shù)觸發(fā)。 概念理解:在某一個事件(trigger)發(fā)生的時候,觸發(fā)預(yù)先設(shè)定(on)的代碼,這是代碼解耦的一種方式。 事件按照級別分為三類 1. 實例級別 綁定事件、觸發(fā)事件的類繼承的是Component,只在當前示例中運...
摘要:反射簡介參考官方簡介的話,具有完整的反射,添加了對類接口函數(shù)方法和擴展進行反向工程的能力。此外,反射提供了方法來取出函數(shù)類和方法中的文檔注釋。 反射簡介 參考官方簡介的話,PHP 5 具有完整的反射 API,添加了對類、接口、函數(shù)、方法和擴展進行反向工程的能力。 此外,反射 API 提供了方法來取出函數(shù)、類和方法中的文檔注釋。 YII2框架中示例 對于yii2框架,應(yīng)該都知道di容器,...
摘要:運行來安裝指定的擴展。這更便于用戶辨別是否是的擴展。當用戶運行安裝一個擴展時,文件會被自動更新使之包含新擴展的信息。上述代碼表明該擴展依賴于包。例如,上述的條目聲明將對應(yīng)于別名。為達到這個目的,你應(yīng)當在公開發(fā)布前做測試。 簡述 擴展是專門設(shè)計的在 Yii 應(yīng)用中隨時可拿來使用的, 并可重發(fā)布的軟件包。 基礎(chǔ) 例如, yiisoft/yii2-debug 擴展在你的應(yīng)用的每個頁面底部添加...
摘要:可以在方法里實現(xiàn)例行檢查和屬性正常化檢查對象方法調(diào)用開始的三個階段都在構(gòu)造函數(shù)里實現(xiàn),這意味著當你得到一個對象的實例時,它已經(jīng)被初始化為適當?shù)臓顟B(tài),可以被放心的使用。 組件 組件是YII框架application(應(yīng)用)的主要組成部分,它是 [yiiaseComponent]的實例或者子類。組件有三個重要特征(功能): 屬性(properties) 事件(events) 行為(...
閱讀 2826·2021-11-25 09:43
閱讀 978·2021-10-11 10:57
閱讀 2477·2020-12-03 17:20
閱讀 3716·2019-08-30 14:05
閱讀 2422·2019-08-29 14:00
閱讀 1991·2019-08-29 12:37
閱讀 1661·2019-08-26 11:34
閱讀 3201·2019-08-26 10:27