2012-09-19 108 views
0

任何人都可以解释为什么下面的代码导致“无法找到类”错误?使用完全限定名称工作实例化类,但是消除了“使用”语句的优点。变量中的PHP命名空间类

<?php 

namespace 
{ 
    use Foo\Bar; 

    new Bar; // Works 

    $class = 'Foo\Bar'; 

    new $class; // Works 

    $class = 'Bar'; 

    new $class; // "Cannot find class" error 
} 

namespace Foo 
{ 
    class Bar {} 
} 

感谢

+0

同时在PHP 5.3.2和5.3.10上测试 – kfriend

回答

2

嗯,我想这是实际上是一个feature。和别名不会帮助这里,出于同样的原因:

导入是在编译时进行的,因此不影响动态 类,函数或常量名。 [...]

<?php 
use My\Full\Classname as Another, My\Full\NSname; 

$obj = new Another; // instantiates object of class My\Full\Classname 
$a = 'Another'; 
$obj = new $a;  // instantiates object of class Another 
?> 

是的,它失败排序的use与动态类的目的。