摘要:事件的綁定和解除對事件進行綁定和解綁。使用全局函數作為來進行綁定使用對象的成員函數來進行綁定使用類的靜態成員函數進行綁定使用匿名函數上面的數組是用來維護事件數組。事件的級別類級別事件類級別事件用于響應所有類實例的事件。
Yii基礎 事件 event
使用事件,可以在特定的時點,觸發執行預先設定的一段代碼,事件既是代碼解耦的一種方式,也是設計業務流程的一種模式。
事件的相關要素
這是一個什么事件?
誰觸發了事件?
誰負責監聽這個事件?
事件怎么處理?
事件的相關數據是什么?
事件的引入事件是從yiiaseComponent類開始出現的。與事件相關的另外一個類是yiiaseEvent,他封裝了一些方法,同時提供一些輔助。
事件handler事件handler就是事件處理程序,負責事件觸發后應該怎么辦。handler可以是以下形式:
函數名
對象的方法,或類的靜態方法
匿名函數
一個handler必須是以下方式
function ($event){ // $event就是yiiaseEvent }
handler的調用是通過call_user_func()來實現的。
事件的綁定和解除yiiaseComponent::on(), yiiaseComponent::off()對事件進行綁定和解綁。
person = new Person; // 使用PHP全局函數作為handler來進行綁定 $person->on(Person::EVENT_GREET, "person_say_hello"); // 使用對象$obj的成員函數say_hello來進行綁定 $person->on(Person::EVENT_GREET, [$obj, "say_hello"]); // 使用類Greet的靜態成員函數say_hello進行綁定 $person->on(Person::EVENT_GREET, ["apphelperGreet", "say_hello"]); // 使用匿名函數 $person->on(Person::EVENT_GREET, function ($event) { echo "Hello"; });
private _events = [];
上面的數組是用來維護事件handler數組。該數組的下標為事件名,數組元素是形為一系列 [$handler, $data] 的數組
handler在$event[]數組中的位置很重要,代表的是執行的先后順序。執行的先后順序很重要。
在解除事件時,可以把一個事件下的所有handler都解除掉。
事件的觸發事件的觸發,需要調用yiiaseComponent::trigger()。
yiiaseApplication->run(),很好的舉例說明了觸發器如何調用。
事件的級別 類級別事件使用 yiiaseComponent::on() 可以為各種事件綁定handler,也可以為同一事件綁定多個handler。
trigger與on傳入數據方法不同。在on()中,使用一個簡單變量,傳入,并在handler中通過$event->data進行訪問。這個是在綁定時確定的數據。而有的數據是沒辦法在綁定時確定的。
類級別事件用于響應所有類實例的事件。
類級別事件的綁定需要使用yiiaseEvent::on()
類級別事件的觸發仍然是在yiiaseComponent::trigger()中
類級別事件的觸發,應使用yiiaseEvent::trigger()。這個函數不會觸發實例級別的事件。
全局事件利用了Application實例在整個應用的生命周期中全局可訪問的特性,來實現這個全局事件的。當然,你也可以將他綁定在任意全局可訪問的的Component上。
全局事件一個最大優勢在于:在任意需要的時候,都可以觸發全局事件,也可以在任意必要的時候綁定,或解除一個事件:
Yii::$app->on("bar", function ($event) { echo get_class($event->sender); }); Yii::$app->trigger("bar", new Event(["sender" => $this]));
上面的Yii::$app->on()可以在任何地方調用,就可以完成事件的綁定。而 Yii::$app->trigger()只要在綁定之后的任何時候調用就OK了。
參考
http://www.digpage.com
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21437.html
摘要:行為所要響應的事件重載方法,表示這個行為將對類何種事件進行何種反饋。行為用的最多的,也是對于各種事件的響應。當出現命名沖突時,行為會自行排除沖突,自動使用先綁定的行為。目前還沒有能支持行為。 Yii基礎 行為(Behavior) 行為(behavior)可以在不修改現有類的情況下,對類的功能進行擴充。 通過將行為綁定到一個類,可以使類具有行為本身所定義的屬性和方法,就好像類本來就有這些...
摘要:環境需要了解一下一個純粹的與本地環境密切相關的配置項。對于配置項以數組進行組織。數組元素表示將要創建的對象的完整類名。數組元素表示指定為屬性的初始值為。數組元素表示將綁定到對象的事件中。對于形式配置項,視配置值為一個事件,綁定到上。 環境 需要了解一下cookieValidationKey:一個純粹的、與本地環境密切相關的配置項。 但是,在有些情況下,cookieValidationK...
摘要:成員變量可以視為一個可讀可寫沒有任何預處理或后處理的屬性。而成員變量由于外部不可見,與屬性外的特性不相符,所以不能視為屬性。在一些表示數據結構數據集合等簡單情況下,且不需讀寫控制等,可以考慮使用成員變量作為屬性,這樣可以提高一點效率。 Yii基礎 屬性 property 屬性用于表征類的狀態,從訪問的形式上看,屬性與成員變量沒有區別。但是,成員變量是就類的結構構成而言的概念,而屬性是就...
摘要:設置別名的目的特殊的變量常量保存整個應用的所有別名。別名的解析過程先按根別名找到可能保存別名的分支。別名必然以打頭。別名解析時,優先匹配較長的別名。使用別名時,要將別名放在最前面,不能放在中間。 Alias 設置別名的目的:特殊的變量常量 yiiBaseYii::$aliases保存整個Yii應用的所有別名。 在yiiaseApplication的構造函數__construct()中...
摘要:實現的類自動加載,依賴于的,注冊一個自己的自動加載函數,并插入到自動加載函數棧的最前面,確保的會被最先調用。首先加載第三方的,再加載的。最后加載的,這樣可以保證的優先加載。 實現 Yii的類自動加載,依賴于PHP的spl_autoload_register(), 注冊一個自己的自動加載函數(autoloader),并插入到自動加載函數棧的最前面,確保Yii的autoloader會被最先...
閱讀 1362·2021-11-15 11:45
閱讀 3127·2021-09-27 13:36
閱讀 2874·2019-08-30 15:54
閱讀 992·2019-08-29 12:38
閱讀 2910·2019-08-29 11:22
閱讀 2992·2019-08-26 13:52
閱讀 2037·2019-08-26 13:30
閱讀 591·2019-08-26 10:37