2011-08-18 86 views
0

我無法動態實例化PHP中的類以在我的文件命名空間中工作。 PHP似乎完全不知道我的文件上的use關鍵字,因爲我嘗試基於變量的值動態地實例化類。PHP:Instanciating命名空間類

有沒有一個很好的解決方案,除了硬編碼命名空間動態實例化類時?

下面是一些快速的樣本,以說明我的意思:

代碼new two('one');在結果類一個也沒有找到與以下兩個文件被包括:

文件1:

namespace uno; 
use dos; 

class one { 
    function __construct($what) { 
     new $what; 
    } 
} 

文件2:

namespace dos; 
class two { } 

文件3:

new one('two'); // Doesn't work! 

回答

1

要麼全合格

new \uno\one('two'); 

或通過use

use uno\one; 
new one('two'); 

或定義(相對)合格(但是,使用一個層次的命名空間沒有太大意義)

use uno; 
new uno\one('two'); 

使用更深的名稱空間更有意義

use path\to\myNamespace; 
     new myNamespace\foo\BarClass; 

或將其放在同一個命名空間

namespace uno; 
new one('two'); 

http://php.net/language.namespaces.rules

+0

嗨!我沒有使用一個級別的命名空間,但爲了在這裏簡化以獲得一些答案而不讓所有人都感到困惑,我決定在我的示例中跳過它們 – Industrial

+0

無關緊要:它沒有什麼意義,級別的命名空間;)使用更深的命名空間更有意義'使用path \ to \ myNamespace; new myNamespace \ foo \ BarClass;'請注意'new'後面的標識符是如何從'use'語句的命名空間的最後部分開始的。 – KingCrunch

+0

從我的觀點來看問題是PHP忽略了我的動態實例化類的'use'關鍵字,即。 '新$什麼'。任何想法呢? – Industrial

相關問題