我计划研究如何在PHP中实现插件架构。我已经尝试在网上搜索可能的参考资料,但我想如果我在这里问的话,我可能会更快更好地搜索一个好的参考资料。
有没有人尝试过使用插件架构进行网络项目?
谢谢, 欧文
答案 0 :(得分:4)
我写过wordpress插件,他们所依赖的魔力是“变量函数名称”。例如,这是有效的php,其中将调用函数调用phpinfo():
$func_name="phpinfo";
$func_name();
这允许开发人员进行“Hook”函数调用,就像用自己的函数覆盖它们而不必更改应用程序的其余部分一样。 Linux内核模块都是关于“挂钩”的,没有这种行为它们就无法工作。
不幸的是,PHP变量函数名称是一个令人作呕的黑客,它消耗了大量资源。名称空间中的所有函数都放在一个列表中,并且在调用函数之前必须搜索此列表,这是O(log2(n))。还要记住,在HipHop中无法正确加速变量函数名称,尽管代码仍将转换为有效的C ++。一个更好的方法是在python中重新声明函数,这将是O(1)复杂性,但PHP开发团队 HATES 这个想法(是的,我已经要求这个功能了! )。
祝你好运!答案 1 :(得分:1)
有很多概念可以被认为是一个插件'。您可以使用以下命令编写插件系统:
答案 2 :(得分:0)
您可以了解Zend Framework如何实现其Plugin Loader
组件。
基本上你设置路径到存储插件的位置,加载器试图加载以LIFO方式找到的第一个插件。
答案 3 :(得分:0)
这两个课程
怎么样?并且有一些规则
例如,假设Plugin类具有url_routes属性,默认值为空数组,则子类可以覆盖并在此数组中添加任何所需的URL。
然后,Plugin Handler / Loader会将这些url路由从子类添加到底层系统。
答案 4 :(得分:0)
不要忘记功能 __ autoload 。您可以动态加载组件。 像:
SomeModule::test();
function __autoload($class)
{
$class = preg_replace('/^\W/', '', strtolower($class));
include 'modules/'.$class.'.php';
}