通过Eval()调用成员函数的类

时间:2012-11-04 06:58:43

标签: php eval

是的,我很清楚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(),但我们特意指示使用它。

2 个答案:

答案 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';

Demo

答案 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';