本菜菜对插件机制的一些理解,不知道对不对,希望没给楼主指错路,也希望大家知道批评:
PHP 面向 Composer 开发不影响自己实现插件机制,我们可以再额外注册一个 autoload 到 __autoload() 队列中。
https://www.php.net/manual/zh/function.spl-autoload-register.php假设我们使用了像 Laravel 这样的框架开发程序系统,在插件安装后由于不能更改原有程序代码,所以要用到的是“回调”这样的实现。
当 某某事件 发生时,调用插件的 某某方法,传递必要的(统一的)参数。
然后我们只需要规范好插件安装在什么地方,我如何加载你,我有那些事件,触发时会给你什么。
比如我会规范:插件统一在 /Ext/ 目录(命名空间)下,以自身插件名为二级命名空间。
大致规范就是 Ext/{开发者}/{插件名};
然后我会公开一个事件列表,事件源::事件名(可以提供的参数)
Page::onLoadPre($page_type = 'index', $data)
AdminPanel::addMenu($position = 'post', $menu)
然后插件安装的时候,注册一次自己的所有事件到对应的回调。
当你的代码执行到某个地方的时候,触发钩子,遍历已经注册的回调。
或者某些只需要执行一次,比如刚才的 AddMenu 就在安装的时候执行一次就好了。