请问类似观察者模式下的事件应该如何实现呢? [ 2.0 版本 ]
请问类似观察者模式下的事件应该如何实现呢?谢谢。
如题, 假设有 model Cat
Mouse
class Mouse {
public function run($event){
//Event::on(self::class, self::EVENT_AFTER_RUN, [Cat::class,Cat::HANDEL_MOUSE_RUN]);// 显式的绑定 是可以出发事件的, 但不能满足我的需求
echo '我是老鼠, 9 zuo 9 die';
$this->trigger(self::EVENT_AFTER_RUN);// 上方不绑定事件时 对象级别事件触发, Cat 不会相应
Event::trigger(Mouse::class, Mouse::EVENT_AFTER_RUN);// 上方不绑定事件时 类级别事件触发, Cat 也不会相应
}
}
class Cat {
public function init()
{
parent::init();
Event::on(Mouse::class, Mouse::EVENT_AFTER_RUN, self::HANDEL_MOUSE_RUN);// 类级别事件绑定...但是没用.
}
public static function handelMouseRun(){
echo '我发现了一直老鼠,我要抓住它';
}
}
我现在是希望 Cat 类级别监控 Mouse run 事件,只要发现任何地方的 任何一个 Mouse 的实例跑了,Cat 就去抓老鼠
不知道该如何实现呢?谢谢各位。
共 2 个回答
-
return19931112 回答于 2019-07-22 09:46 举报
可以通过php原生的
SplObserver SplSubject
实现 -
class Mouse { public function init(){ parent::init(); Event::on(Cat::class, Mouse::EVENT_AFTER_RUN, [Cat::class,"handelMouseRun"]); } public function run($event){ echo '我是老鼠, 9 zuo 9 die'; Event::trigger(Cat::class, Mouse::EVENT_AFTER_RUN); } } class Cat { public static function handelMouseRun(){ echo '我发现了一直老鼠,我要抓住它'; } }
xjdata
注册时间:2011-12-07
最后登录:2024-05-05
在线时长:112小时38分
最后登录:2024-05-05
在线时长:112小时38分
- 粉丝23
- 金钱14169
- 威望75
- 积分16039