如何在 PHP 应用程序中实现 Hook 系统以在代码执行之前或之后更改代码。 hookloader 类的基本架构如何适用于 PHP CMS(甚至是简单的应用程序)。那么如何将其扩展为完整的插件/模块加载器?
(另外,有没有关于CMS Hook 系统的书籍或教程?)
最佳答案
您可以将事件系统构建为 simple或您想要的复杂度。
/**
* Attach (or remove) multiple callbacks to an event and trigger those callbacks when that event is called.
*
* @param string $event name
* @param mixed $value the optional value to pass to each callback
* @param mixed $callback the method or function to call - FALSE to remove all callbacks for event
*/
function event($event, $value = NULL, $callback = NULL)
{
static $events;
// Adding or removing a callback?
if($callback !== NULL)
{
if($callback)
{
$events[$event][] = $callback;
}
else
{
unset($events[$event]);
}
}
elseif(isset($events[$event])) // Fire a callback
{
foreach($events[$event] as $function)
{
$value = call_user_func($function, $value);
}
return $value;
}
}
添加事件
event('filter_text', NULL, function($text) { return htmlspecialchars($text); });
// add more as needed
event('filter_text', NULL, function($text) { return nl2br($text); });
// OR like this
//event('filter_text', NULL, 'nl2br');
然后这样调用
$text = event('filter_text', $_POST['text']);
或者像这样删除该事件的所有回调
event('filter_text', null, false);
关于php - 如何做一个PHP钩子(Hook)系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8336308/