0

我刚刚开始学习命名空间。如果我这样做:

$a = new Devices\Desktop();

这行得通。但是我有动态的类名,所以我必须从一个变量中做到这一点。

$a = 'Devices\Desktop';
$a = new $a();

这是行不通的,尽管它是一样的。找不到该类。为什么?

4

1 回答 1

3

四肢外出:

namespace Foo;

class Bar { }

new Bar;

$bar = 'Bar';
new $bar;

这行不通。字符串类名始终是绝对的,它们不会相对于当前命名空间进行解析(因为您可以将字符串从一个命名空间传递到另一个命名空间,那么它应该解析哪个?)。为了使这两个实例等效,您需要使用完全限定的类名:

$bar = 'Foo\Bar';

常量在__NAMESPACE__这里很有用:

$bar = __NAMESPACE__ . '\Bar';
于 2013-05-20T15:56:48.853 回答