用作变量时命名空间不起作用?

IMB*_*IMB 0 php namespaces

<?php

namespace Vendor\Package;

$test1 = new Foo\Bar(); // works as usual

$test2 = 'Foo\Bar';
$test2 = new $test2(); // does not work

$test3 = 'Vendor\Package\Foo\Bar';
$test3 = new $test3(); // but this works
Run Code Online (Sandbox Code Playgroud)

我正在寻找使用$test2但它不起作用,即使它看起来应该,因为它几乎与$test3工作相同.

这是预期的还是我需要使用一些语法test2来工作?

Bar*_*mar 5

使用动态类名时,必须完全限定.该文件说:

必须使用完全限定名称(带名称空间前缀的类名).请注意,由于动态类名,函数名或常量名中的限定名和完全限定名之间没有区别,因此不需要前导反斜杠.

Foo\Bar不是完全合格的,它与Vendor\Package您使用之前的namespace声明选择的相对.