【发布时间】:2014-07-22 21:11:18
【问题描述】:
我有一个在(非常大的)循环中执行 eval 语句的类。 eval 语句是需要处理的数据库存储代码(混合 html 和 php)。但是,因此存在严重的性能问题。
我不想在循环中每次都解析 eval 语句,而是想从来自我的类中的数据库的可用 eval 代码创建一个动态方法。
我想到了下面的伪代码,以便将eval代码转换为方法:
class foo
{
private $test=3;
public function doloop()
{
for($i=0;$i<5;$i++)
{
$string="echo 50 * \$this->test.'<br>';";
$func="evalcode_001";
if(!isset(${$func}))
{
${$func}=create_function('',$string);
}
${$func}();
}
}
}
$obj_foo = new foo();
$obj_foo->doloop();//must output '150<br>150<br>150<br> .....'
但是,在运行它时,我收到错误消息“在...中不在对象上下文中时使用 $this”。所以很明显我并没有真正在类中创建方法。
所以我的问题是: 如何动态地为类创建方法并为给定方法分配代码。基本上我希望能够做到:
$obj_foo->evalcode_001();
在上面的例子中。
帮助赞赏
PS 我用的是 PHP5.4
【问题讨论】:
-
FWIW:将 code 存储在数据库中是一个非常糟糕的主意。除了您显然遇到的问题之外,您正在编写 PHP 代码并且几乎无法更改它,因为您拥有大量的数据库“数据”,这取决于代码中的某些细节。
-
嗨;我同意,但它是存储模板数据的地方,用于信件和 CMS。大多数是纯 html,但多年来已经完成了自定义,其中包括 PHP 代码。
-
见这里:stackoverflow.com/questions/12868066/… 具体来说,他们提到不使用 create_function(他接着说他认为这不适用于方法和类)。
标签: php