我想让一段代码可以重复使用,并希望使用面向对象的代码来完成它。
有没有办法以任何方式'插入'面向对象的代码? (看下面我的例子,看看我的意思)
class Insert {
function insert_test($a, $b) {
return $a.$b;
}
}
$Insert = new Insert();
$insertplugin = "$Insert->insert_test('abc', '123')"; // the plugin of object oriented code
include_once("reusablecode.php");
reusablecode.php:
$something =1;
if($something >0)
{
$insertplugin;
}
答案 0 :(得分:3)
技术上可以,你可以调用eval($insertPlugin);
来运行存储在字符串中的代码。在设置$ insertPlugin变量时,您需要使用单引号来防止$ Insert变量转换为字符串。
然而,这通常被视为邪恶(特别是如果您的代码是根据用户输入构建的)请参见此处:When is eval evil in php?
这取决于你的“插件”中你真正希望改变的是什么样的正确方法。一种方法是创建一个封装所需功能的类。
class Command{
private $inserter;
public function __constructor($inserter){
$this->inserter=$inserter;
}
public function run(){
$this->inserter->insert_test('abc', '123');
}
}
$command = new Command(new Insert());
$something =1;
if($something >0)
{
$command->run();
}
另一种方法是使用lambda函数:
$insertPlugin=function() use ($Insert) {
$Insert->insert_test('abc', '123');
};
$something =1;
if($something >0)
{
$insertPlugin();
}
听起来你应该在OOP上做更多的阅读 - 我认为你基本上想要的是一个'Command'类http://www.fluffycat.com/PHP-Design-Patterns/Command/特别是使用抽象类来允许你定义多个不同的命令(或你所谓的“插件”)