我为我的CMS设计了两种形式的插件,但我对其中一种有问题。第一个将在模板中实现,这很酷,没有问题。但是第二个是我的管理区,我是这样设计的。
首先,我定义了一个指令文件,它是一个包含以下内容的文本文件:
REPLACE_INLINE("sample.php","//Echo/*","//Echo*/","echo \"test\"","echo \"new test\"");在我的插件安装函数中,我拆分了这些参数,然后去做,最后我保存了新的内容。它工作得很好,但我想知道,这是设计插件的正确方式吗?我认为这不是,为此我发布了一个主题。
顺便说一句,我的sample.php文件,我假设它是我的内容管理系统的源文件之一,包含以下数据:
<?php
function showText(){
//Echo/*
echo "test";
//Echo*/
}
?>还有一件事,如果我这样做了,也许下一次另一个插件想要与echo“test”行交互一些数据,如果它不像主模板,那么我们就会爆炸!撞车。
插件安装后的sample.php数据:
<?php
function showText(){
//Echo/*
echo "new test";
//Echo*/
}
?>发布于 2011-09-16 20:42:55
您应该使用面向对象的体系结构,其中子类可以覆盖showText (和/或调用旧的实现),或者使用回调,如下所示:
$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的类型)。
发布于 2011-09-16 20:36:35
一种更有条理的方式是go Object Oriented。例如,构建一个抽象的Plugin基类,并在您的插件中扩展它。
对于您的管理区域,您可以创建一个具有一些附加要求和/或添加的基本功能的AdminPlugin。就像一个getText()函数,它会返回文本(你的管理区域最终应该呈现它)。
您还可以在您的对象中包含依赖项管理,以防止如您所述的崩溃。
https://stackoverflow.com/questions/7444702
复制相似问题