是否可以包含字符串?

时间:2013-08-09 08:44:22

标签: php

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

3 个答案:

答案 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在答案中是严格直接的。

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