首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插件的设计方法

插件的设计方法
EN

Stack Overflow用户
提问于 2011-09-16 20:32:33
回答 2查看 106关注 0票数 1

我为我的CMS设计了两种形式的插件,但我对其中一种有问题。第一个将在模板中实现,这很酷,没有问题。但是第二个是我的管理区,我是这样设计的。

首先,我定义了一个指令文件,它是一个包含以下内容的文本文件:

代码语言:javascript
复制
REPLACE_INLINE("sample.php","//Echo/*","//Echo*/","echo \"test\"","echo \"new test\"");

在我的插件安装函数中,我拆分了这些参数,然后去做,最后我保存了新的内容。它工作得很好,但我想知道,这是设计插件的正确方式吗?我认为这不是,为此我发布了一个主题。

顺便说一句,我的sample.php文件,我假设它是我的内容管理系统的源文件之一,包含以下数据:

代码语言:javascript
复制
<?php
  function showText(){
    //Echo/*
    echo "test";
    //Echo*/
  }
?>

还有一件事,如果我这样做了,也许下一次另一个插件想要与echo“test”行交互一些数据,如果它不像主模板,那么我们就会爆炸!撞车。

插件安装后的sample.php数据:

代码语言:javascript
复制
<?php
  function showText(){
    //Echo/*
    echo "new test";
    //Echo*/
  }
?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-16 20:42:55

您应该使用面向对象的体系结构,其中子类可以覆盖showText (和/或调用旧的实现),或者使用回调,如下所示:

代码语言:javascript
复制
$plugin_callbacks = array();
function showText() {
  $text = 'test';
  foreach ($plugin_callbacks as $cb) {
    $text = call_user_func($cb, $text);
  }
  echo $text;
}

$plugin_callbacks[] = function($text) {
  return 'new text';
}
$plugin_callbacks[] = function ($text) {
  return '<b>' . $text . '</b>';
};

但是,正如您所看到的,这很快就会变得混乱。因此,除非回调的数量非常有限,否则请使用面向对象的设计(这将要求您有一个实例化工厂,插件可以在其中注册并确定echoObject的类型)。

票数 1
EN

Stack Overflow用户

发布于 2011-09-16 20:36:35

一种更有条理的方式是go Object Oriented。例如,构建一个抽象的Plugin基类,并在您的插件中扩展它。

对于您的管理区域,您可以创建一个具有一些附加要求和/或添加的基本功能的AdminPlugin。就像一个getText()函数,它会返回文本(你的管理区域最终应该呈现它)。

您还可以在您的对象中包含依赖项管理,以防止如您所述的崩溃。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7444702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档