我打算研究如何在PHP中实现插件架构。我试图在网上寻找可能的参考资料,但我认为如果在这里询问,我的寻找好的参考资料的速度会更快、更相关。
有没有人在Web项目中尝试过使用插件架构?
谢谢, Erwin
我打算研究如何在PHP中实现插件架构。我试图在网上寻找可能的参考资料,但我认为如果在这里询问,我的寻找好的参考资料的速度会更快、更相关。
有没有人在Web项目中尝试过使用插件架构?
谢谢, Erwin
我已经编写过WordPress插件,它们依赖于“可变函数名称”这种魔法。例如,以下代码是有效的php代码,其中将调用函数调用phpinfo():
$func_name="phpinfo";
$func_name();
这使得开发人员可以“挂钩”函数调用,即使用自己的函数覆盖它们,而无需更改应用程序的其余部分。Linux内核模块都是关于“挂钩”的,如果没有这种行为,它们就无法工作。
不幸的是,对于PHP来说,可变函数名是一种令人讨厌的hack,会消耗大量资源。命名空间中的所有函数都被放在一个列表中,必须在调用函数之前搜索该列表,这是O(log2(n))。此外,请记住,虽然可以将代码转换为有效的C++,但HipHop无法正确加速可变函数名。更好的方法是重新声明函数,就像您可以在Python中做的那样,这将是O(1)复杂度,但是PHP开发团队非常讨厌这个想法(是的,我已经提出了这个功能的要求!)。
祝你好运!
有很多概念可以被认为是“插件”。你可以使用以下方式编写插件系统:
别忘了函数__autoload,你可以动态地加载组件,例如:
SomeModule::test();
function __autoload($class)
{
$class = preg_replace('/^\W/', '', strtolower($class));
include 'modules/'.$class.'.php';
}
这两个类是什么?
并且有一些规则:
例如,假设Plugin类具有url_routes属性,默认值为空数组,则子类可以覆盖并在此数组中添加任何所需的URL。
然后,插件处理程序/加载器将从子类中添加这些URL路由到底层系统中。