我的意思是,我有一个字符串:"class cl{...}"
,我想包含它。我知道有eval
函数,但这是最好的方法吗?
答案 0 :(得分:2)
这取决于你为什么把它作为一个字符串。它来自哪里?
如果是用户生成的,即用户输入,最好不要通过eval。用户可以轻松地在您的网站上运行任何代码!
如果您从文件中读取此信息并且知道它是合法的,请在该文件上使用include
。但你也可以使用eval
。重要的是该字符串不是用户生成的!
答案 1 :(得分: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));
答案 2 :(得分:1)
这是PHP用户提出这种问题的一种习惯:设计一些不寻常和不可靠的机制,然后陷入困境然后来问Stack Overflow问题。我们有一个典型的XY problem,有一种不安全的气味。还有一个有臭味的答案,因为SO在答案中是严格直接的。
为什么你必须颠倒它:首先提出一个问题,然后为你的真正问题找到合适的解决方案。