Events 簡單的事件管理器:Events

jopen 9年前發布 | 10K 次閱讀 Events PHP開發

Events ——簡單的事件管理器。 Leaps/Events事件為建立松耦合應用提供了極大的靈活性,它允許擴展包參與到應用的核心執行流程中而無需修改程序代碼。

安裝

"require" : {
    "php" : ">=5.4.0",
    "leaps/events": "1.0.*"
}

基本使用

這個組件極易使用:

<?php
//Create an instance
$d = new \Leaps\Events\Dispatcher();
$d->listen('foo',function(){
    return 'hello';
});
$response = $d->trigger('foo');
echo $response;

觸發事件

只要把你要觸發的事件名告訴 Dispatcher 類就可以觸發一個事件:

觸發一個事件:

<?php
 //Create an instance 
 $d = new \Leaps\Events\Dispatcher(); 
 $response = $d->trigger('loaded');

注意,我們將trigger方法的執行結果賦予了一個變量。這個方法將返回一個數組,數組中包含所有監聽這一事件的監聽器執行后的返回數據。

如果只是要獲取第一條返回數據的話,可以這樣:

觸發一個事件并獲取第一條返回值:

<?php
//Create an instance
$d = new \Leaps\Events\Dispatcher();
$response = $d->trigger('loaded');

注意: first 方法會觸發所有監聽某一事件的監聽器,但是最后只返回第一條數據。

觸發一個事件,并直到有一個事件監聽器返回非null數據為止:

<?php
//Create an instance
$d = new \Leaps\Events\Dispatcher();
$response = $d->first('loaded');

注意: until方法在獲取到第一條非null的返回數據之前將按順序執行所有監聽某一事件的監聽器。

監聽事件

光有事件,沒人監聽也是白搭。下面演示為事件注冊一個事件處理器:

注冊一個事件處理器:

<?php
//Create an instance
$d = new \Leaps\Events\Dispatcher();
$response = $d->listen('loaded'function()
    {
        // I'm executed on the "loaded" event!
    });

傳遞個這個方法的閉包函數會在 "loaded" 事件每次 觸發時執行。

事件隊列

有時候你會希望將需要觸發的事件 放到“隊列”里存儲起來,而不要立即觸發。這就需要使用 queue 和flush 方法了。首先,向事件隊列中注冊一個帶有唯一標識符的事件:

向事件隊列注冊一個事件:

<?php
//Create an instance
$d = new \Leaps\Events\Dispatcher();
$response = $d->queue('loaded', $user->id, array($user));

這個方法接受3個參數。第一個參數是事件隊列的名稱,第二個參數是事件的唯一標識符,第三個參數是用來傳遞給事件清理器的數組,這一數組攜帶了有用的數據。

接下來,我們為 foo 事件注冊一個事件處理器:

注冊一個事件處理器:

<?php
//Create an instance
$d = new \Leaps\Events\Dispatcher();
$response = $d->flusher('loaded', function($key, $user)
    {
        //
    });

注意,flusher方法接受兩個參數。第一個事存放在事件隊列中的某個事件的唯一標識符,在上面的例子中就是用戶ID;第二個參數(其后還可以有更多參數)是這個事件所攜帶的數據。

最后,我們調用 flush 方法將隊列中的所有事件交由事件處理器處理掉:

<?php
//Create an instance
$d = new \Leaps\Events\Dispatcher();
$response = $d->flush('foo', function($key, $user)
    {
        //
    });

項目主頁:http://www.baiduhome.net/lib/view/home/1430106120693

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!