0

我的意思是,我有一个字符串:"class cl{...}",我想包含它。我知道有这个eval功能,但这是最好的方法吗?

4

3 回答 3

2

这取决于您为什么将其作为字符串。它从何而来?

如果是用户生成的,即用户输入,最好不要通过eval。用户可以轻松地在您的网站上运行任何代码!

如果您从文件中读取并知道它是合法的,只需include在该文件上使用。但你也可以使用eval. 重要的是该字符串不是用户生成的!

于 2013-08-09T08:48:26.757 回答
1

这是 PHP 用户提出这类问题的某种习惯:设计一些不寻常且不可靠的机制,然后坚持下去,然后带着问题来到 Stack Overflow。我们有一个典型的XY 问题,带有不安全的味道。还有一个臭名昭著的答案,因为它的答案是严格直接的。

为什么你必须把它颠倒过来:首先提出一个问题,然后为你的真正问题找到正确的解决方案。

于 2013-08-09T09:33:25.060 回答
1

Ok 可以使用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 回答