php - 如何做一个PHP钩子(Hook)系统?

标签 php plugins module content-management-system hook

如何在 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/

相关文章:

php - PHP 中的 SQL 问题

php - 如何在 laravel 4 中调试 ajax

java - 基于PHP的网络爬虫或基于JAVA的网络爬虫

java - 如何从 intellij 中的调试变量值生成模拟?

javascript - 如何使不对集合进行操作的 jQuery 插件函数可调用以供独立使用

java - 尝试在 2 个 Eclipse 插件之间传递类实例时抛出 LinkageError

javascript - 如何将流和 typescript 类型添加到 NPM 模块

php - foreach($_SESSION AS $value){...} -> 获取 session 的数组键

javascript - Reactjs:类/原型(prototype)在我们的应用程序中有任何位置吗?

javascript - 找不到 ffmpeg 文件夹错误