亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Yii源碼解讀 - 事件

AaronYuan / 3192人閱讀

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

Yii基礎(chǔ) 事件 event

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

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

這是一個(gè)什么事件?

誰觸發(fā)了事件?

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

事件怎么處理?

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

事件的引入

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

事件handler

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

函數(shù)名

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

匿名函數(shù)

一個(gè)handler必須是以下方式

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

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

事件的綁定和解除

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

person = new Person;

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

// 使用對(duì)象$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í)行的先后順序很重要。

在解除事件時(shí),可以把一個(gè)事件下的所有handler都解除掉。

事件的觸發(fā)

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

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

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

事件的級(jí)別 類級(jí)別事件

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

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

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

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

全局事件

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

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

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()只要在綁定之后的任何時(shí)候調(diào)用就OK了。

參考

http://www.digpage.com

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/21437.html

相關(guān)文章

  • Yii源碼解讀-行為

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

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

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

    cgh1999520 評(píng)論0 收藏0
  • Yii源碼解讀-屬性

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

    instein 評(píng)論0 收藏0
  • Yii源碼解讀-別名

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

    banana_pi 評(píng)論0 收藏0
  • Yii源碼解讀-類自動(dòng)加載

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

    Jeffrrey 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<