成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

淺析Yii2.0的事件Event

李義 / 3780人閱讀

摘要:全局級(jí)別利用實(shí)例在整個(gè)應(yīng)用的生命周期中全局可訪問(wèn)的特性,來(lái)實(shí)現(xiàn)這個(gè)全局事件的。類級(jí)別通過(guò)維護(hù)類的屬性數(shù)組,觸發(fā)事件時(shí)通過(guò)類名和事件名稱取到當(dāng)前類以及父類的數(shù)據(jù),再通過(guò)函數(shù)觸發(fā)。

概念理解:在某一個(gè)事件(trigger)發(fā)生的時(shí)候,觸發(fā)預(yù)先設(shè)定(on)的代碼,這是代碼解耦的一種方式。
事件按照級(jí)別分為三類 1. 實(shí)例級(jí)別

綁定事件、觸發(fā)事件的類繼承的是Component,只在當(dāng)前示例中運(yùn)行,不與類的其他實(shí)例發(fā)生關(guān)系,也不與其他類、其他實(shí)例發(fā)生關(guān)系。

代碼示例:

data;
        $event->handled = true;
    }
    
    public function sayWorld($event)
    {
        echo $event->data;
    }
}

1.綁定事件:

$event = new EventTest();

$event->on(EventTest::EVENT_SAY_HELLO, [$event, "sayHello"], "Hello!");

$event->on(EventTest::EVENT_SAY_HELLO, [$event, "sayWorld"], "World!");

2.解除事件:

$event->off(EventTest::EVENT_SAY_HELLO, [$event, "sayHello"]);

3.觸發(fā)事件:

$event->trigger( EventTest::EVENT_SAY_HELLO);
2. 類級(jí)別

綁定事件、觸發(fā)事件的類繼承的是Event,類級(jí)別事件會(huì)被類自身、類的實(shí)例、后代類、后代類實(shí)例的同一事件所觸發(fā),影響范圍更大

代碼示例:

data;
    }
    
    public function sayWorld($event)
    {
        echo $event->data;
    }
}

1.綁定事件:

$event = new EventTest();

$event->on("commoncomponentsEventTest", EventTest::EVENT_SAY_HELLO, [$event, "sayHello"], "Hello!");

$event->on("commoncomponentsEventTest", EventTest::EVENT_SAY_HELLO, [$event, "sayWorld"], "World!");

2.解除事件:

$event->off("commoncomponentsEventTest", EventTest::EVENT_SAY_HELLO, [$event, "sayWorld"]);
        

3.觸發(fā)事件:

$event->trigger("commoncomponentsEventTest", EventTest::EVENT_SAY_HELLO);

類級(jí)別參數(shù)比實(shí)例級(jí)別多一個(gè)參數(shù):類名
注意:
解除事件如果不傳 handle,則會(huì)解除該事件下的所有 handle。
在其中一個(gè) handle 里面加上 $event->handled = true 也會(huì)阻止后續(xù) handle 的觸發(fā),如上代碼。
3. 全局級(jí)別

利用Application實(shí)例在整個(gè)應(yīng)用的生命周期中全局可訪問(wèn)的特性,來(lái)實(shí)現(xiàn)這個(gè)全局事件的。在任意需要的時(shí)候,都可以觸發(fā)全局事件,也可以在任意必要的時(shí)候綁定,或解除一個(gè)事件。

代碼示例:

1.綁定事件:
$event = new EventTest();

Yii::$app->on("global_event", [$event, "globalEvent"], "global event");

2.觸發(fā)事件:
Yii::$app->trigger("global_event");

全局級(jí)別實(shí)際上也是一個(gè)特殊的實(shí)例。[注意所謂全局其實(shí)作用范圍也只是在當(dāng)前請(qǐng)求的生命周期有效,而非當(dāng)前會(huì)話(簡(jiǎn)單的說(shuō),打開(kāi)瀏覽器,訪問(wèn)服務(wù)器,直到瀏覽器關(guān)閉,稱為一次會(huì)話)]
原理

實(shí)例級(jí)別通過(guò)維護(hù)Component類的屬性 $_events 數(shù)組,觸發(fā)事件時(shí)通過(guò)[事件名稱]取到[當(dāng)前實(shí)例]的handle數(shù)據(jù),再通過(guò)函數(shù)call_user_func觸發(fā)handle。

類級(jí)別通過(guò)維護(hù)Event類的屬性 $_events 數(shù)組,觸發(fā)事件時(shí)通過(guò)[類名和事件名稱]取到[當(dāng)前類以及父類]的handle數(shù)據(jù),再通過(guò)函數(shù)call_user_func觸發(fā)handle。

Component 的 $_event 數(shù)據(jù)結(jié)構(gòu)示例如下

Array
(
    [say_hello] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => commoncomponentsEventTest Object
                                (
                                    [_events:yiiaseComponent:private] => Array
 *RECURSION*
                                    [_eventWildcards:yiiaseComponent:private] => Array
                                        (
                                        )

                                    [_behaviors:yiiaseComponent:private] => Array
                                        (
                                        )

                                )

                            [1] => say_hello
                        )

                    [1] => Hello!
                )

        )

)
小結(jié)

以上總結(jié)參考了深入理解Yii2.0,其實(shí)以前就看過(guò),但是也只是局限于看過(guò),沒(méi)有自己跑demo調(diào)試、查看源代碼,然后就誤以為自己明白了,其實(shí)過(guò)倆天什么都不記得了。所以現(xiàn)在通過(guò)寫博客來(lái)加深自己的理解,這篇博客其實(shí)主要講的還是事件的使用,具體原理一帶而過(guò),如果有小伙伴一知半解,可能查看一下源代碼[yiiaseComponent yiiaseEvent]你就明白了。由于水平有限,歡迎小伙伴交流和指正。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/31545.html

相關(guān)文章

  • 淺析Yii2.0屬性Property

    摘要:概念理解第一次看深入理解的時(shí)候,我也是懵逼的,屬性不就是類的屬性嗎,有什么好說(shuō)的。屬性的實(shí)現(xiàn)步驟繼承自。聲明一個(gè)用于保存該屬性的私有成員變量。如果只提供了,那么該屬性為只讀屬性,只提供了,則為只寫。 概念理解:第一次看深入理解Yii2.0的時(shí)候,我也是懵逼的,屬性不就是類的屬性嗎,有什么好說(shuō)的。后來(lái)才知道Yii框架對(duì)成員變量和屬性做了區(qū)分,那類的成員變量和屬性到底是什么關(guān)系又有什么區(qū)別...

    arashicage 評(píng)論0 收藏0
  • 淺析Yii2.0行為Behavior

    摘要:概念理解使用行為可以在不修改現(xiàn)有類的情況下,對(duì)類的功能進(jìn)行擴(kuò)充。最后將行為名稱和行為實(shí)例放到的屬性中,至此,行為的綁定就結(jié)束了。不過(guò)在解除的時(shí)候雖然都是刪掉相應(yīng)的,但是解除行為還需要解除在綁定行為的時(shí)候綁定的事件,這點(diǎn)不太一樣。 概念理解:使用行為(behavior)可以在不修改現(xiàn)有類的情況下,對(duì)類的功能進(jìn)行擴(kuò)充。 通過(guò)將行為綁定到一個(gè)類,可以使類具有行為本身所定義的屬性和方法,就好像...

    legendmohe 評(píng)論0 收藏0
  • 淺析React之事件系統(tǒng)(二)

    摘要:因?yàn)樽柚故录芭莸男袨橹荒苡糜诤铣墒录校瑳](méi)法阻止原生事件的冒泡。同時(shí)的創(chuàng)建和冒泡是在原生事件冒泡到最頂層的之后的。淺析之事件系統(tǒng)一 上篇文章中,我們談到了React事件系統(tǒng)的實(shí)現(xiàn)方式,和在React中使用原生事件的方法,那么這篇文章我們來(lái)繼續(xù)分析下,看看React中合成事件和原生事件混用的各種情況。 上一個(gè)例子 在上篇文章中,我們舉了個(gè)例子。為了防止大家不記得,我們來(lái)看看那個(gè)例子的代...

    villainhr 評(píng)論0 收藏0
  • 淺析 JS 中 EventLoop 事件循環(huán)(新手向)

    摘要:同時(shí),如果執(zhí)行的過(guò)程中發(fā)現(xiàn)其他函數(shù),繼續(xù)入棧然后執(zhí)行。上面我們討論的其實(shí)都是同步代碼,代碼在運(yùn)行的時(shí)候只用調(diào)用棧解釋就可以了。 序 Event Loop 這個(gè)概念相信大家或多或少都了解過(guò),但是有一次被一個(gè)小伙伴問(wèn)到它具體的原理的時(shí)候,感覺(jué)自己只知道個(gè)大概印象,于是計(jì)劃著寫一篇文章,用輸出倒逼輸入,讓自己重新學(xué)習(xí)這個(gè)概念,同時(shí)也能幫助更多的人理解它~ 概念 JavaScript 是一門 ...

    chadLi 評(píng)論0 收藏0
  • JS事件淺析

    摘要:事件有很多,有我用過(guò)的有我沒(méi)用過(guò)的,今天我想分析一番。阻止默認(rèn)事件,表單提交,標(biāo)簽。觸發(fā)事件的元素,事件委托會(huì)用到。在文本插入文本框之前會(huì)觸發(fā)事件。 一個(gè)網(wǎng)頁(yè)由三層組成(html 結(jié)構(gòu),js 行為,css 表現(xiàn)),一切的東西其實(shí)都建立在html上,html里面的dom提供了一些事件,然后通過(guò)js封裝,我們可以用js去調(diào)用dom上的事件。事件有很多,有我用過(guò)的有我沒(méi)用過(guò)的,今天我想分析一...

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

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

0條評(píng)論

閱讀需要支付1元查看
<