Events 簡單的事件管理器:Events
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) { // });
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!