-2

はい、私はEval()がどれほど恐ろしいかをよく知っています。私には選択の余地がありません。それは割り当てのためであり、教授は私たちにそれを使用するように指示しました。

Eval()を使用しているときに、PHPがクラス内からクラスのメンバー関数を呼び出せない理由を理解するのに苦労しています。例えば:

$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()の使用は避けたいと思いますが、特に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 に答える