国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

淺析Yii2.0的事件Event

李義 / 3705人閱讀

摘要:全局級別利用實例在整個應用的生命周期中全局可訪問的特性,來實現這個全局事件的。類級別通過維護類的屬性數組,觸發事件時通過類名和事件名稱取到當前類以及父類的數據,再通過函數觸發。

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

綁定事件、觸發事件的類繼承的是Component,只在當前示例中運行,不與類的其他實例發生關系,也不與其他類、其他實例發生關系。

代碼示例:

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.觸發事件:

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

綁定事件、觸發事件的類繼承的是Event,類級別事件會被類自身、類的實例、后代類、后代類實例的同一事件所觸發,影響范圍更大

代碼示例:

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.觸發事件:

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

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

利用Application實例在整個應用的生命周期中全局可訪問的特性,來實現這個全局事件的。在任意需要的時候,都可以觸發全局事件,也可以在任意必要的時候綁定,或解除一個事件。

代碼示例:

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

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

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

全局級別實際上也是一個特殊的實例。[注意所謂全局其實作用范圍也只是在當前請求的生命周期有效,而非當前會話(簡單的說,打開瀏覽器,訪問服務器,直到瀏覽器關閉,稱為一次會話)]
原理

實例級別通過維護Component類的屬性 $_events 數組,觸發事件時通過[事件名稱]取到[當前實例]的handle數據,再通過函數call_user_func觸發handle

類級別通過維護Event類的屬性 $_events 數組,觸發事件時通過[類名和事件名稱]取到[當前類以及父類]的handle數據,再通過函數call_user_func觸發handle

Component 的 $_event 數據結構示例如下

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!
                )

        )

)
小結

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/31545.html

相關文章

  • 淺析Yii2.0屬性Property

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

    arashicage 評論0 收藏0
  • 淺析Yii2.0行為Behavior

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

    legendmohe 評論0 收藏0
  • 淺析React之事件系統(二)

    摘要:因為阻止事件冒泡的行為只能用于合成事件中,沒法阻止原生事件的冒泡。同時的創建和冒泡是在原生事件冒泡到最頂層的之后的。淺析之事件系統一 上篇文章中,我們談到了React事件系統的實現方式,和在React中使用原生事件的方法,那么這篇文章我們來繼續分析下,看看React中合成事件和原生事件混用的各種情況。 上一個例子 在上篇文章中,我們舉了個例子。為了防止大家不記得,我們來看看那個例子的代...

    villainhr 評論0 收藏0
  • 淺析 JS 中 EventLoop 事件循環(新手向)

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

    chadLi 評論0 收藏0
  • JS事件淺析

    摘要:事件有很多,有我用過的有我沒用過的,今天我想分析一番。阻止默認事件,表單提交,標簽。觸發事件的元素,事件委托會用到。在文本插入文本框之前會觸發事件。 一個網頁由三層組成(html 結構,js 行為,css 表現),一切的東西其實都建立在html上,html里面的dom提供了一些事件,然后通過js封裝,我們可以用js去調用dom上的事件。事件有很多,有我用過的有我沒用過的,今天我想分析一...

    klivitamJ 評論0 收藏0

發表評論

0條評論

李義

|高級講師

TA的文章

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