《PHP實例:php實現事件監聽與觸發的方法》要點:
本文介紹了PHP實例:php實現事件監聽與觸發的方法,希望對您有用。如果有疑問,可以聯系我們。
本文實例講述了php實現事件監聽與觸發的辦法.分享給大家供大家參考.具體分析如下:PHP應用
閑來無事,想了想PHP如何實現事件監聽,參考了jQuery的事件綁定思路,簡單的實現了一下.PHP應用
主要功能:PHP應用
1.綁定事件 支持一個事件綁定多個動作,支持綁定一次性事件
2.觸發事件
3.注銷事件
PHP應用
代碼如下:
class Event
{
??? protected static $listens?????? = array();
?????
??? public static function listen($event, $callback, $once=false){
??????? if(!is_callable($callback)) return false;
??????? self::$listens[$event][]??? = array('callback'=>$callback, 'once'=>$once);
??????? return true;
??? }
?????
??? public static function one($event, $callback){
??????? return self::listen($event, $callback, true);
??? }
?????
??? public static function remove($event, $index=null){
??????? if(is_null($index))
??????????? unset(self::$listens[$event]);
??????? else
??????????? unset(self::$listens[$event][$index]);
??? }
?????
??? public static function trigger(){
??????? if(!func_num_args()) return;
??????? $args?????????????????????? = func_get_args();
??????? $event????????????????????? = array_shift($args);
??????? if(!isset(self::$listens[$event])) return false;
??????? foreach((array) self::$listens[$event] as $index=>$listen){
??????????? $callback?????????????? = $listen['callback'];
??????????? $listen['once'] && self::remove($event, $index);
??????????? call_user_func_array($callback, $args);
??????? }
??? }
}
以下是一些調用的例子:
代碼如下:
// 增加監聽walk事件
Event::listen('walk', function(){
??? echo "I am walking...n";
});
// 增加監聽walk一次性事件
Event::listen('walk', function(){
??? echo "I am listening...n";
}, true);
// 觸發walk事件
Event::trigger('walk');
/*
I am walking...
I am listening...
*/
Event::trigger('walk');
/*
I am walking...
*/
?
Event::one('say', function($name=''){
??? echo "I am {$name}n";
});
?
Event::trigger('say', 'deeka'); // 輸出 I am deeka
Event::trigger('say', 'deeka'); // not run
?
class Foo
{
??? public function bar(){
??????? echo "Foo::bar() is calledn";
??? }
?????
??? public function test(){
??????? echo "Foo::foo() is called, agrs:".json_encode(func_get_args())."n";
??? }
}
?
$foo??? = new Foo;
?
Event::listen('bar', array($foo, 'bar'));
Event::trigger('bar');
?
Event::listen('test', array($foo, 'test'));
Event::trigger('test', 1, 2, 3);
?
class Bar
{
??? public static function foo(){
??????? echo "Bar::foo() is calledn";
??? }
}
?
Event::listen('bar1', array('Bar', 'foo'));
Event::trigger('bar1');
?
Event::listen('bar2', 'Bar::foo');
Event::trigger('bar2');
?
function bar(){
??? echo "bar() is calledn";
}
?
Event::listen('bar3', 'bar');
Event::trigger('bar3');
希望本文所述對大家的PHP程序設計有所贊助.PHP應用
《PHP實例:php實現事件監聽與觸發的方法》是否對您有啟發,歡迎查看更多與《PHP實例:php實現事件監聽與觸發的方法》相關教程,學精學透。維易PHP學院為您提供精彩教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/13865.html