Typecho插件的调用流程

Admin
2022-07-14 / 0 评论 / 32 阅读 / 正在检测是否收录...

  在后台控制台插件页面,点击启用,是通过var\Widget\Plugins\Edit类的active($pluginName)方法来处理的。
QQ图片20220714112521.png

  首先获取到插件文件路径$pluginFileName和类名$className,然后载入插件require_once $pluginFileName;
  调用用户定义的函数call_user_func([$className, 'activate']);我们在Plugin.php文件中有定义activate。
QQ图片20220714112812.png

  给挂载点付值及设置回调的方法。我们以\Typecho\Plugin::factory('index.php')->begin = array(__CLASS__,"Test")为例。
  插件类有魔术方法__set(string $component, callable $value),当给不存在的一个属性付值时会调用它。完成插件句柄及回调的设置工作。
QQ图片20220714114927.png

调用完成后,将插件信息序列化付值给value,名称是plugins,最后保存到数据库表options中。

接着看是如何调用的,在Typecho入口index.php中
QQ图片20220714115534.png
  \Widget\Init::alloc();进行初始化组件,会进行Db、User、Options、Cookie、Router、Plugin等类的初始化工作。Options的执行函数中会把表options的记录读出来并反序列化再付值给它$this->plugins = unserialize($this->plugins);
QQ图片20220714120242.png

  在Init组件执行过程中对组件初始化
QQ图片20220714120542.png
  完成后在index.php中 通过 \Typecho\Plugin::factory('index.php')->begin()调用。同样是魔术方法__Call。在其中调用用户自定义的方法call_user_func_array($callback, $args);
QQ图片20220714120922.png
  最后在日志文件中打印出了我是插件测试。
QQ图片20220714121158.png

1

评论 (0)

取消