【发布时间】:2014-08-21 19:57:11
【问题描述】:
我刚刚阅读了一些关于 PHP 中的观察者模式的内容。
我在某处读到,被观察对象不应该负责通知不同的观察对象,而是被观察对象应该发出一个被观察对象订阅的事件。
这样,被观察对象不需要跟踪不同的观察者,而是应该让观察对象注册到事件。
有没有办法在 PHP 中实现这一点?
我读过当前的实现方式是被观察对象保持对观察者动态数组的引用。
这不是问题,我只是想知道在 PHP 中是否存在类似“事件发射器”的东西。
【问题讨论】:
-
如何在 PrestaShop 中实现:模型类在各种方法(添加、删除、.etc)中具有 Hook:exec('eventName') 函数。 Hook::exec 查找正在侦听此事件的其他对象(类)(已注册到此事件)。然后从该表中检索侦听器对象类的列表,并为每个侦听器类调用一个方法(如果 is_callable)-> hookActionName。
-
这很容易跟踪,只需创建一个具有两个方法的类,一个接受可调用对象和事件的注册函数,以及接受事件并循环注册的可调用对象的通知事件并打电话给他们。
-
两者似乎都是可行的解决方案。谢谢,确实是要从观察到的对象中删除依赖项。创建一个中间类来管理订阅可以做到这一点。
标签: php observer-pattern