我刚开始学习命名空间。如果我这样做:
$a = new Devices\Desktop();
这是有效的。但我有动态类名,所以我必须从变量中做到。
$a = 'Devices\Desktop';
$a = new $a();
这不起作用,虽然它是一样的。找不到该课程。为什么呢?
答案 0 :(得分:3)
走出困境:
namespace Foo;
class Bar { }
new Bar;
$bar = 'Bar';
new $bar;
这不起作用。字符串类名称始终是绝对的,它们不是相对于当前名称空间解析的(因为您可以将字符串从一个名称空间传递到另一个名称空间,它应该针对哪个解析?)。要使这两个实例等效,您需要使用完全限定的类名:
$bar = 'Foo\Bar';
__NAMESPACE__
常量在这里很有用:
$bar = __NAMESPACE__ . '\Bar';