在 PHP 应用程序中实现插件的设计模式

对于如何在PHP应用程序中实现插件是否有共识?

我已经研究了接近的观察者模式,它实际上只是一个通知系统,不允许代码直接扩展应用程序。我目前正在使用我想出的一个简单的钩子系统:

public function registerHook($hookName, array $params = array())
{
    $this->hooks[] = $hookName;

    foreach ( $this->plugins as $pluginName => $hooks ) {
        if ( in_array($hookName, $hooks) ) {
            $plugin = new $pluginName($this, $this->view, $this->controller);

            $plugin->{$hookName}($params);
        }
    }
}

这对于我的目的来说效果很好,但我很好奇是否有一种设计模式已经过多次测试和验证,我只是在重新发明轮子。


答案 1

没有像银弹意义上那样的共识。对于已建立的模式,您有多种选择,例如

仅举几例。

使用哪种方法取决于您,但应确保您的系统体系结构支持模块化。看看这些幻灯片,了解一些想法


答案 2

我认为事件调度程序是实现插件或任何扩展的一种很好且干净的方式。事件调度程序是观察者模式的实现,用于 symfony、Symfony2Zend Framework 2(测试版)。

在github上查看任何这些来源都会带来一些有趣的阅读。不过,可以在这里找到一些有趣的信息:

http://components.symfony-project.org/event-dispatcher/trunk/book/02-Recipes

几年前,我为一个项目写了一个事件和钩子类,如果我能找到它,我会在这里发布。


推荐