带有事件或挂钩的插件系统?

时间:2015-01-27 09:12:18

标签: php events architecture hook

我已经为php中的软件创建了一个插件系统。为了让插件改变程序的行为,我编写了这个(简化的)代码:

class PluginController {

  /* ... */

  public function addHook($name, $function, $priority = 10) {
    /* store the function callback $function  associated with $name */
  }

  public function executeHook($name, $args = array()) {
    /* execute all function callbacks associated with $name
     * in order of their priority and return their results */    
  }
}

因此,插件可以使用addHook添加回调,并且在应用程序的某个位置通过调用executeHook来执行这些回调。

这很有效,但在阅读了一些关于该主题的时间之后,我仍然不确定这种技术是事件 - 还是 hook - 系统。

一些消息人士称,差异与松散和紧密耦合有关。 其他人说钩子有返回值,事件不是。而其他人再次说事件是针对handlig异步活动的,并且钩子只是为了在某些时候注入代码。

再说一遍,上面的代码是关于事件挂钩的,有人可以解释一下这个区别吗?

1 个答案:

答案 0 :(得分:0)

您的代码更像是一个事件。

Hooks 允许插件与调用它的代码进行交互。它们是在假设将返回数据的情况下调用的,并且原始代码通常会在调用钩子后立即遍历返回的数据。

另一方面,

事件仅在特定行动发生时被召唤。它们为插件提供了在此时运行自己的事件处理逻辑的机会,而不会以任何方式直接影响原始代码。

Source