我是靠谱客的博主 追寻蛋挞,最近开发中收集的这篇文章主要介绍php实现事件绑定,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近跟踪yii源码  里面涉及到了绑定事件行为之类,于是自己手写了一个最简单的事件绑定实现


class EventHandle {
private static $_map = array();
//类似jquery绑定事件
public function on($name, $callback)
{
if(!is_callable($callback))
return false;
if(!isset(self::$_map[$name]))
{
self::$_map[$name] = array();
}
self::$_map[$name][] = $callback;
}
//触发事件
public function trigger($name, $event)
{
if(!isset(self::$_map[$name]))
return false;
$function_arr = self::$_map[$name];
foreach($function_arr as $function)
{
call_user_func($function, $event);
}
return true;
}
//移除某个事件特定的回调函数
public function remove($name, $callback)
{
if(!isset(self::$_map[$name]))
return false;
$map = self::$_map[$name];
$pos = array_search($callback, $map, true);
if($pos >= 0)
{
array_splice($map, $pos, 1);
self::$_map[$name] = $map;
}
return true;
}
}
//事件对象
class Event {
public static $options = array();
public function __construct($options = array())
{
$this->options = $options;
}
}
//通过函数当回调函数
function start1($event)
{
echo 'start1asdaa<br>';
var_dump($event);
}
//通过类的方法当回调函数
class EventCallback {
public function start3($event)
{
echo 'start3<br>';
}
}
$eventhandle = new EventHandle();
$eventhandle->on('start', "start1");
$eventhandle->on('start', array("EventCallback", "start3"));
$eventhandle->remove('start', array("EventCallback", "start3"));
$eventhandle->trigger('start', new Event(array('name' => 'hhhh', 'age' => 25)));


出现的结果如下:

start1asdaa
object(Event)[2]  public 'options' => 
    array (size=2)
      'name' => string 'hhhh' (length=4)
      'age' => int 25


转载于:https://blog.51cto.com/chinalx1/2140806

最后

以上就是追寻蛋挞为你收集整理的php实现事件绑定的全部内容,希望文章能够帮你解决php实现事件绑定所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部