1. 云栖社区>
  2. PHP教程>
  3. 正文

php实现事件监听与触发的方法

作者:用户 来源:互联网 时间:2017-12-01 18:38:32

方法事件监听

php实现事件监听与触发的方法 - 摘要: 本文讲的是php实现事件监听与触发的方法,本文实例讲述了php实现事件监听与触发的方法。分享给大家供大家参考。具体分析如下:闲来无事,想了想PHP如何实现事件监听,参考了jQuery的事件绑定思路,简单的实现了一下。主要功能:1.绑定事件 支持一个事件绑定多个动作,支持绑定一次性事

本文实例讲述了php实现事件监听与触发的方法。分享给大家供大家参考。具体分析如下:

闲来无事,想了想PHP如何实现事件监听,参考了jQuery的事件绑定思路,简单的实现了一下。

主要功能:

1.绑定事件 支持一个事件绑定多个动作,支持绑定一次性事件

2.触发事件

3.注销事件

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程序设计有所帮助。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索方法 , 事件 监听 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备