-2

是的,我很清楚 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

页面的其余部分将是空白的。一旦我通过 Eval() 从函数内调用函数,似乎整个 PHP 脚本就会停止。甚至最后的“回声‘测试’;” 不打印。

是否有一些技巧可以让它工作,或者这是 Eval() 的限制?同样,如果可以的话,我会避免使用 Eval(),但我们被明确指示使用它。

4

2 回答 2

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

演示

于 2012-11-04T07:04:09.230 回答
0

使用单引号或保护 \$,你在调用 f2() 的地方也有错误,使用 $this->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';
于 2012-11-04T07:06:32.053 回答