php实现事件监听与触发的方法
本文实例讲述了php实现事件监听与触发的方法。分享给大家供大家参考。具体分析如下:
闲来无事,想了想PHP如何实现事件监听,参考了jQuery的事件绑定思路,简单的实现了一下。
主要功能:
1.绑定事件支持一个事件绑定多个动作,支持绑定一次性事件
2.触发事件
3.注销事件
classEvent { protectedstatic$listens =array(); publicstaticfunctionlisten($event,$callback,$once=false){ if(!is_callable($callback))returnfalse; self::$listens[$event][] =array('callback'=>$callback,'once'=>$once); returntrue; } publicstaticfunctionone($event,$callback){ returnself::listen($event,$callback,true); } publicstaticfunctionremove($event,$index=null){ if(is_null($index)) unset(self::$listens[$event]); else unset(self::$listens[$event][$index]); } publicstaticfunctiontrigger(){ if(!func_num_args())return; $args =func_get_args(); $event =array_shift($args); if(!isset(self::$listens[$event]))returnfalse; 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"Iamwalking...n"; }); //增加监听walk一次性事件 Event::listen('walk',function(){ echo"Iamlistening...n"; },true); //触发walk事件 Event::trigger('walk'); /* Iamwalking... Iamlistening... */ Event::trigger('walk'); /* Iamwalking... */ Event::one('say',function($name=''){ echo"Iam{$name}n"; }); Event::trigger('say','deeka');//输出Iamdeeka Event::trigger('say','deeka');//notrun classFoo { publicfunctionbar(){ echo"Foo::bar()iscalledn"; } publicfunctiontest(){ echo"Foo::foo()iscalled,agrs:".json_encode(func_get_args())."n"; } } $foo =newFoo; Event::listen('bar',array($foo,'bar')); Event::trigger('bar'); Event::listen('test',array($foo,'test')); Event::trigger('test',1,2,3); classBar { publicstaticfunctionfoo(){ echo"Bar::foo()iscalledn"; } } Event::listen('bar1',array('Bar','foo')); Event::trigger('bar1'); Event::listen('bar2','Bar::foo'); Event::trigger('bar2'); functionbar(){ echo"bar()iscalledn"; } Event::listen('bar3','bar'); Event::trigger('bar3');
希望本文所述对大家的PHP程序设计有所帮助。