0

つまり、文字列:"class cl{...}"があり、それを含めたいと思います。機能があることは知っていevalますが、それが最善の方法ですか?

4

3 に答える 3

2

これを文字列として持つ理由によって異なります。それはどこから来たのですか?

ユーザーが生成したもの、つまりユーザー入力である場合は、評価にかけない方がよいでしょう。ユーザーは、あなたの Web サイトで任意のコードを簡単に実行できます。

これをファイルから読み取って、それが正当であることがわかっている場合は、includeそのファイルで使用してください。しかし、あなたも使うことができますeval。その文字列がユーザー生成ではないことが重要です!

于 2013-08-09T08:48:26.757 に答える
1

わかりましたcall_user_funcを使用してオブジェクトを動的に呼び出すことができます

namespace Foobar;

class Foo {
    static public function test() {
        print "Hello world!\n";
    }
}

call_user_func(__NAMESPACE__ .'\Foo::test'); // As of PHP 5.3.0
call_user_func(array(__NAMESPACE__ .'\Foo', 'test')); // As of PHP 5.3.0

あなたの場合:

$obj = '\Foo';
$method = 'test';
call_user_func(array(__NAMESPACE__ .$obj, $method));
于 2013-08-09T09:30:06.233 に答える
1

これは、PHP ユーザーがこの種の質問をするための一種の習慣です。異常で信頼性の低いメカニズムを考案し、それで行き詰まり、スタック オーバーフローに質問することです。そして、不安の匂いがする典型的なXY 問題があります。また、SOは厳密に直接的な回答であるため、臭い回答もあります。

逆さまにしなければならない理由: 最初に質問をしてから、実際の問題に対する適切な解決策を見つけてください。

于 2013-08-09T09:33:25.060 に答える