我正在想办法为我自己的框架创建一个插件架构。我已经阅读了许多主题并在这里和其他网站上发帖。基本上我已经找到了以下解决方案,这似乎是 PHP 中唯一的好选择(目前)。
这个想法是每个类都扩展了一种类似于类的观察者。所以一个 Template 类、BaseController 等总是扩展一个 Plugin 类。
class BaseController extends Plugin
{
public function __construct()
{
// Plugin check, notify all loaded plugins
$this->checkForEarlyHooks();
// Init some standard stuff
$this->view = new Template();
$this->baseLayout = 'layout.html';
$this->something = new Something();
// Plugin check, notify all loaded plugins
$this->checkForLateHooks();
}
}
所以这里基本上发生的是,当 indexController 扩展 baseController 时,插件检查就完成了。在这种情况下为构造函数。当您想在实际调用 Action 方法之前使用插件进行某种登录检查时,这会很方便。
Plugin 类可以从调用的类中解析,并知道在加载的插件中查找哪些函数。
另请注意,它会检查加载的插件列表 2 次。在构造函数中(早期)加载任何内容之前,一个在加载所有变量时(晚期)。
我还可以将变量添加到“checkForLateHooks()”函数中。所以钩子函数也可以操纵它们,比如'baseLayout'变量。
挂钩函数如下所示:
public function hookConstruct ( &$baseLayout )
{
$baseLayout = 'login.html';
}
现在基本上我的问题是,这种方法有什么好处吗?我知道可能还有很多其他方法可以做到这一点。但我主要不想以后遇到设计问题。现在看来是个好主意,但你永远不知道以后会怎样……
如果我没记错的话(从我读过的所有帖子中),这有点像 WordPress 所做的(以及其他一些框架)。