我正在考虑在我的网站上实现类似于观察者模式的逻辑,以实现钩子。
我正在寻找的是类似于Best way to allow plugins for a PHP application
的内容然而,那里的代码太有限了,因为我无法将多个钩子附加到同一个侦听器。
我对如何放大该代码以使其能够在一个事件中监听多个动作一无所知。
谢谢
答案 0 :(得分:3)
你可以像ircmaxell建议的那样:添加钩子。但显然,他给出的信息对你来说还不够。
如果您喜欢通过示例学习,您可以查看CMS Drupal,它不是OOP,而是使用观察者模式(称为hooks)来实现模块化设计。
钩子的工作原理如下:
例如:
神奇发生在所谓的user_callbacks中。 An example:
$hook = 'insert'
foreach (module_implements($hook) as $module) {
$function = $module .'_'. $hook;
$result = call_user_func_array($function, $args);
}
函数module_implements
可能类似于:
$list = module_list(FALSE, TRUE, $sort); //looks for files that are considered "modules" or "addons".
foreach ($list as $module) {
if (function_exists($module.'_'.$hook)) { //see if the module has the hook 'registered'
$implementations[$hook][] = $module; //if so: add it to a list with functions to be called.
}
}
答案 1 :(得分:1)
只需添加一个'*'钩子,并修改hook()
函数以调用命名事件和'*'事件中的所有'钩子'。
然后,只需:
add_listener('*', 'mycallback');
答案 2 :(得分:0)
看看Spl_Observer。
你说你不想要OOP,但你可以很容易地实现非OOP包装。