我的意思是,我有一个字符串:"class cl{...}"
,我想包含它。我知道有这个eval
功能,但这是最好的方法吗?
问问题
94 次
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 回答