【问题标题】:Instantiating class by string in current namespace在当前命名空间中按字符串实例化类
【发布时间】:2012-06-03 16:48:43
【问题描述】:

我正在尝试实例化一个动态创建的类名的对象。 我正在使用命名空间,而我要实例化的类在同一个命名空间中。

举例来说,这很好用:

namespace MyNamespace;

new MyClass; // MyNamespace\MyClass instantiated

而这不是:

namespace MyNamespace;

$class = 'MyClass';
new $class; // Class 'MyClass' not found

这是一个错误还是我做错了什么?

【问题讨论】:

    标签: php namespaces


    【解决方案1】:

    当您使用带有new 的字符串时,您需要提供一个完全限定的类名。

    您可以使用__NAMESPACE__

    $fullclass = __NAMESPACE__ . '\\' . $class;
    new $fullclass;
    

    请参阅new operator__NAMESPACE__ 魔术常量的文档。

    【讨论】:

    • 嗨,看起来有效。您可以链接到您的来源以供参考吗?谢谢:-)
    • 很好,感谢您的链接。但是我现在想知道,当您说“完全限定的类名”时,它不应该也以'\'开头吗?也许在这种情况下可以隐含前导“\”?
    • 另一件事,虽然你的答案是有效的,但我猜实际代码会因为连接而引发语法错误。预先将限定名称分配给变量,它应该可以工作。
    • 跟类加载的顺序有关,解释here
    • @jgivoni 好的,已更正。前导的 `\` 只表示“这是一个完全限定的类名”;它不是该类名的一部分。
    猜你喜欢
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多