在当前命名空间中按字符串实例化类


Instantiating class by string in current namespace

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

要检查,这工作正常:

namespace MyNamespace;
new MyClass; // MyNamespace'MyClass instantiated

而这不会:

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

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

将字符串与 new 一起使用时,需要提供完全限定的类名。

您可以使用__NAMESPACE__执行此操作:

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

请参阅new运算符和__NAMESPACE__魔术常量的文档。