2012-09-19 153 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與動態類的目的。