从字符串实例化类不会真正在PHP中工作

时间:2013-05-20 15:51:27

标签: php

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

$a = new Devices\Desktop();
这是有效的。但我有动态类名,所以我必须从变量中做到。

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

这不起作用,虽然它是一样的。找不到该课程。为什么呢?

1 个答案:

答案 0 :(得分:3)

走出困境:

namespace Foo;

class Bar { }

new Bar;

$bar = 'Bar';
new $bar;

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

$bar = 'Foo\Bar';

__NAMESPACE__常量在这里很有用:

$bar = __NAMESPACE__ . '\Bar';