PHP中的插件架构

时间:2010-02-23 00:16:07

标签: php architecture plugins

我计划研究如何在PHP中实现插件架构。我已经尝试在网上搜索可能的参考资料,但我想如果我在这里问的话,我可能会更快更好地搜索一个好的参考资料。

有没有人尝试过使用插件架构进行网络项目?

谢谢, 欧文

5 个答案:

答案 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)

这两个课程

怎么样?
  1. 插件处理程序/加载程序
  2. 插件
  3. 并且有一些规则

    1. 插件处理程序/加载程序是一个单例类,管理插件类的所有子句。
    2. 任何插件都必须从插件类继承。
    3. 插件类具有可以被其子类覆盖的预定义属性和方法,因此可以使用其他方法来挂钩系统(但我不确定结果是否存在任何重大差异)。
    4. 例如,假设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';
}