是的,我很清楚Eval()是多么可怕,我别无选择,这是一项任务,教授指示我们使用它。
我无法弄清楚为什么PHP在使用Eval()时不会让我从类中调用类的成员函数。例如:
$code="class evalTest{
function f1(){
echo 'f1';
f2();
}
function f2(){
echo 'f2';
}
}
$x=new evalTest();
$x->f2();
$x->f1();";
eval($code);
echo 'test';
以上代码将打印出来:
f2f1
,页面的其余部分将为空白。看起来整个PHP脚本在我通过Eval()从函数内调用函数时就会停止。即使是最后的“回声'测试';”没有打印。
是否有一些技巧可以让它工作,或者这是Eval()的限制?再说一次,如果可以的话,我会避免使用Eval(),但我们特意指示使用它。
答案 0 :(得分:2)
因为您需要拨打$this->f2();
而不是f2()
。
如果您使用双引号,还需要转义$
,因为双引号字符串中的任何$blah
都被解释为变量引用。
<?php
$code="class evalTest{
function f1(){
echo 'f1';
\$this->f2();
}
function f2(){
echo 'f2';
}
}
\$x=new evalTest();
\$x->f2();
\$x->f1();";
eval($code);
echo 'test';
答案 1 :(得分:0)
使用单引号或保护\ $,你也有错误,你调用f2(),使用$ this-&gt; f2 http://codepad.org/DkQ3PiTQ
$code='class evalTest{
function f1(){
echo "f1";
$this->f2();
}
function f2(){
echo "f2";
}
}
$x=new evalTest();
$x->f2();
$x->f1();;';
eval($code);
echo 'test';