成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Yii源碼解讀 - 事件

AaronYuan / 3145人閱讀

摘要:事件的綁定和解除對事件進(jìn)行綁定和解綁。使用全局函數(shù)作為來進(jìn)行綁定使用對象的成員函數(shù)來進(jìn)行綁定使用類的靜態(tài)成員函數(shù)進(jìn)行綁定使用匿名函數(shù)上面的數(shù)組是用來維護(hù)事件數(shù)組。事件的級別類級別事件類級別事件用于響應(yīng)所有類實例的事件。

Yii基礎(chǔ) 事件 event

使用事件,可以在特定的時點(diǎn),觸發(fā)執(zhí)行預(yù)先設(shè)定的一段代碼,事件既是代碼解耦的一種方式,也是設(shè)計業(yè)務(wù)流程的一種模式。

事件的相關(guān)要素

這是一個什么事件?

誰觸發(fā)了事件?

誰負(fù)責(zé)監(jiān)聽這個事件?

事件怎么處理?

事件的相關(guān)數(shù)據(jù)是什么?

事件的引入

事件是從yiiaseComponent類開始出現(xiàn)的。與事件相關(guān)的另外一個類是yiiaseEvent,他封裝了一些方法,同時提供一些輔助。

事件handler

事件handler就是事件處理程序,負(fù)責(zé)事件觸發(fā)后應(yīng)該怎么辦。handler可以是以下形式:

函數(shù)名

對象的方法,或類的靜態(tài)方法

匿名函數(shù)

一個handler必須是以下方式

function ($event){
    // $event就是yiiaseEvent
}

handler的調(diào)用是通過call_user_func()來實現(xiàn)的。

事件的綁定和解除

yiiaseComponent::on(), yiiaseComponent::off()對事件進(jìn)行綁定和解綁。

person = new Person;

// 使用PHP全局函數(shù)作為handler來進(jìn)行綁定
$person->on(Person::EVENT_GREET, "person_say_hello");

// 使用對象$obj的成員函數(shù)say_hello來進(jìn)行綁定
$person->on(Person::EVENT_GREET, [$obj, "say_hello"]);

// 使用類Greet的靜態(tài)成員函數(shù)say_hello進(jìn)行綁定
$person->on(Person::EVENT_GREET, ["apphelperGreet", "say_hello"]);

// 使用匿名函數(shù)
$person->on(Person::EVENT_GREET, function ($event) {
    echo "Hello";
});
private _events = [];

上面的數(shù)組是用來維護(hù)事件handler數(shù)組。該數(shù)組的下標(biāo)為事件名,數(shù)組元素是形為一系列 [$handler, $data] 的數(shù)組

handler$event[]數(shù)組中的位置很重要,代表的是執(zhí)行的先后順序。執(zhí)行的先后順序很重要。

在解除事件時,可以把一個事件下的所有handler都解除掉。

事件的觸發(fā)

事件的觸發(fā),需要調(diào)用yiiaseComponent::trigger()

yiiaseApplication->run(),很好的舉例說明了觸發(fā)器如何調(diào)用。

使用 yiiaseComponent::on() 可以為各種事件綁定handler,也可以為同一事件綁定多個handler。
triggeron傳入數(shù)據(jù)方法不同。在on()中,使用一個簡單變量,傳入,并在handler中通過$event->data進(jìn)行訪問。這個是在綁定時確定的數(shù)據(jù)。而有的數(shù)據(jù)是沒辦法在綁定時確定的。

事件的級別 類級別事件

類級別事件用于響應(yīng)所有類實例的事件。

類級別事件的綁定需要使用yiiaseEvent::on()

類級別事件的觸發(fā)仍然是在yiiaseComponent::trigger()

類級別事件的觸發(fā),應(yīng)使用yiiaseEvent::trigger()。這個函數(shù)不會觸發(fā)實例級別的事件。

全局事件

利用了Application實例在整個應(yīng)用的生命周期中全局可訪問的特性,來實現(xiàn)這個全局事件的。當(dāng)然,你也可以將他綁定在任意全局可訪問的的Component上。

全局事件一個最大優(yōu)勢在于:在任意需要的時候,都可以觸發(fā)全局事件,也可以在任意必要的時候綁定,或解除一個事件:

Yii::$app->on("bar", function ($event) {
    echo get_class($event->sender);
});

Yii::$app->trigger("bar", new Event(["sender" => $this]));

上面的Yii::$app->on()可以在任何地方調(diào)用,就可以完成事件的綁定。而 Yii::$app->trigger()只要在綁定之后的任何時候調(diào)用就OK了。

參考

http://www.digpage.com

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21437.html

相關(guān)文章

  • Yii源碼解讀-行為

    摘要:行為所要響應(yīng)的事件重載方法,表示這個行為將對類何種事件進(jìn)行何種反饋。行為用的最多的,也是對于各種事件的響應(yīng)。當(dāng)出現(xiàn)命名沖突時,行為會自行排除沖突,自動使用先綁定的行為。目前還沒有能支持行為。 Yii基礎(chǔ) 行為(Behavior) 行為(behavior)可以在不修改現(xiàn)有類的情況下,對類的功能進(jìn)行擴(kuò)充。 通過將行為綁定到一個類,可以使類具有行為本身所定義的屬性和方法,就好像類本來就有這些...

    IntMain 評論0 收藏0
  • Yii源碼解讀-環(huán)境&配置

    摘要:環(huán)境需要了解一下一個純粹的與本地環(huán)境密切相關(guān)的配置項。對于配置項以數(shù)組進(jìn)行組織。數(shù)組元素表示將要創(chuàng)建的對象的完整類名。數(shù)組元素表示指定為屬性的初始值為。數(shù)組元素表示將綁定到對象的事件中。對于形式配置項,視配置值為一個事件,綁定到上。 環(huán)境 需要了解一下cookieValidationKey:一個純粹的、與本地環(huán)境密切相關(guān)的配置項。 但是,在有些情況下,cookieValidationK...

    cgh1999520 評論0 收藏0
  • Yii源碼解讀-屬性

    摘要:成員變量可以視為一個可讀可寫沒有任何預(yù)處理或后處理的屬性。而成員變量由于外部不可見,與屬性外的特性不相符,所以不能視為屬性。在一些表示數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)集合等簡單情況下,且不需讀寫控制等,可以考慮使用成員變量作為屬性,這樣可以提高一點(diǎn)效率。 Yii基礎(chǔ) 屬性 property 屬性用于表征類的狀態(tài),從訪問的形式上看,屬性與成員變量沒有區(qū)別。但是,成員變量是就類的結(jié)構(gòu)構(gòu)成而言的概念,而屬性是就...

    instein 評論0 收藏0
  • Yii源碼解讀-別名

    摘要:設(shè)置別名的目的特殊的變量常量保存整個應(yīng)用的所有別名。別名的解析過程先按根別名找到可能保存別名的分支。別名必然以打頭。別名解析時,優(yōu)先匹配較長的別名。使用別名時,要將別名放在最前面,不能放在中間。 Alias 設(shè)置別名的目的:特殊的變量常量 yiiBaseYii::$aliases保存整個Yii應(yīng)用的所有別名。 在yiiaseApplication的構(gòu)造函數(shù)__construct()中...

    banana_pi 評論0 收藏0
  • Yii源碼解讀-類自動加載

    摘要:實現(xiàn)的類自動加載,依賴于的,注冊一個自己的自動加載函數(shù),并插入到自動加載函數(shù)棧的最前面,確保的會被最先調(diào)用。首先加載第三方的,再加載的。最后加載的,這樣可以保證的優(yōu)先加載。 實現(xiàn) Yii的類自動加載,依賴于PHP的spl_autoload_register(), 注冊一個自己的自動加載函數(shù)(autoloader),并插入到自動加載函數(shù)棧的最前面,確保Yii的autoloader會被最先...

    Jeffrrey 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<