插件系统如何工作(wordpress,mybb ......)?

Pet*_*ter 14 php plugins wordpress-plugin

我很好奇插件是如何工作的,我只是知道我们不使用插件来改变代码,而是如何在不更改代码的情况下完成工作?编码新项目时编码员应该考虑什么才能有插件?非常感谢你:D

mar*_*rio 19

如何实现插件系统有很多变化.Wordpress使用一种非常常见的方案,通常称为"钩子".我不知道确切的实现,但它基本上是这样的:

// plugin.php script registers its own callback function
register_plugin("hook_type", "plugin_function_123");

function plugin_function_123($params) { ... }
Run Code Online (Sandbox Code Playgroud)

hook_type往往是一个动作名字什么的.当主应用程序运行通过特定点(或者例如需要处理一些数据)时,它会调用所有已注册的回调函数:

$output = call_plugins("hook_type", $param1, $param2);
Run Code Online (Sandbox Code Playgroud)

这通常在幕后实现为一个简单的循环:

foreach ($registered_plugins[$action] as $func) {
    $func($param1, $param2, ...);   // or call_user_func_
}
Run Code Online (Sandbox Code Playgroud)

现在它取决于钩子/动作类型,存在哪些参数,以及是否需要任何结果文本.参数传递也有差异(例如,一些回调需要&$ var引用).而一些插件系统依赖于对象(如果不存在多种不同的动作类型或者要处理更复杂的结构).