【发布时间】:2014-12-17 04:42:19
【问题描述】:
我只是在玩弄 php 来创建插件架构。 为此,我正在使用事件侦听器(调解器)模式,其中代码可以侦听/触发事件。
我真正的问题是如何使侦听器对象在整个应用程序中可用。' 我现在能想到的唯一解决方案是让核心监听器/观察器类单点,这样任何地方的任何代码都可以注册一个监听器。
$listener = Plugin::getInstance();
$listener->addEventListener('savePost', ....);
对于触发,我也可以使用相同的过程。
或
例如,仅将注册的事件数组设为静态
private static $registeredEvents = array();
public function addEventListener($eventName, Closure $c){
self::$registeredEvents[$eventName] = $c;
}
如果我这样做,无论插件/侦听器对象如何提供给任何客户端代码 将使用相同的容器 ( $registeredEvents )。
否则,向其他对象提供侦听器类的新实例会导致注册事件分散。因此,当从系统触发特定事件时,我无法遍历来自不同实例的每个注册事件。
所以请任何人向我展示更有效的方法。
【问题讨论】:
标签: php plugins singleton mediator