最近跟踪yii源码 里面涉及到了绑定事件行为之类,于是自己手写了一个最简单的事件绑定实现
![](/upload/ad_content/xuanchuantu-9.jpg)
专注于为中小企业提供
网站建设、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业
海拉尔免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。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
';
var_dump($event);
}
//通过类的方法当回调函数
class EventCallback {
public function start3($event)
{
echo 'start3
';
}
}
$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
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前文章:php实现事件绑定-创新互联
链接URL:
http://bjjierui.cn/article/shppe.html