php实现事件绑定
admin
2023-06-13 07:02:45
0

最近跟踪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
'; 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


相关内容

热门资讯

王毅会见巴军方高层,谈及伊朗局... 据凤凰卫视报道,中共中央政治局委员、外交部长王毅5月25日在人民大会堂会见巴基斯坦国防军司令兼陆军参...
何妨把课堂打造成学术“直播间” 评论员说 何妨把课堂打造成学术“直播间” ■ 本报评论员 刘晓庆 其实,不只是大学课堂越来越“静悄悄...
空间站完成第8次“太空会师” 5月25日在北京航天飞行控制中心飞控大厅拍摄的神舟二十一号航天员乘组和神舟二十三号航天员乘组拍摄“全...
美军称在伊朗南部实施自卫打击 央视记者获悉,美国中央司令部发言人蒂姆·霍金斯上尉表示,美军25日在伊朗南部实施了自卫打击,“旨在保...
小米押注!闪回科技四次递表港交... 【大河财立方消息】5月25日,闪回科技有限公司(以下简称闪回科技)在港交所提交上市申请,独家保荐人为...
神舟二十三号飞船发射任务圆满成... 乘组一名航天员将开展一年期在轨驻留试验 神舟二十三号飞船发射任务圆满成功 北京时间5月24日23时0...
西安警方:女孩与父亲争执被路人... 5月25日凌晨,针对网传“16岁女孩被陌生男子殴打”一事,西安市公安局莲湖分局发布警情通报。据江西广...
力鼎光电获得外观设计专利授权:... 证券之星消息,根据天眼查APP数据显示力鼎光电(605118)新获得一项外观设计专利授权,专利名为“...
“一箭8星”再启新程!中科宇航... IT之家 5 月 25 日消息,中科宇航今日宣布,近日,力箭一号遥十四运载火箭在中科宇航产业化基地如...
鄠图科普丨一起“趣”阅读|火箭... 火箭发射是太空旅行的开始, 也是人类探索宇宙的重要一步。 火箭是载人和无人航天器进入太空的必备工具,...