2019-07-22 07:38:30 1515次浏览 2条回答 0 悬赏 1000 金钱

请问类似观察者模式下的事件应该如何实现呢?谢谢。

如题, 假设有 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 就去抓老鼠

不知道该如何实现呢?谢谢各位。

  • 回答于 2019-07-22 09:46 举报

    可以通过php原生的SplObserver SplSubject实现

  • 回答于 2019-07-22 18:04 举报
    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
CEO

xjdata

注册时间:2011-12-07
最后登录:2021-07-09
在线时长:112小时28分
  • 粉丝23
  • 金钱14169
  • 威望75
  • 积分16039

热门问题