我已经为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异步活动的,并且钩子只是为了在某些时候注入代码。
再说一遍,上面的代码是关于事件或挂钩的,有人可以解释一下这个区别吗?
答案 0 :(得分:0)
您的代码更像是一个事件。
Hooks 允许插件与调用它的代码进行交互。它们是在假设将返回数据的情况下调用的,并且原始代码通常会在调用钩子后立即遍历返回的数据。
另一方面,事件仅在特定行动发生时被召唤。它们为插件提供了在此时运行自己的事件处理逻辑的机会,而不会以任何方式直接影响原始代码。