2013-12-10 35 views
0

我正在嘗試創建一個工廠設計模式,它將生成具有動態類名的類。具有動態類名的工廠設計模式

我的代碼:

namespace FOO; 

class MyFactory { 
    public static function create($name) { 
     return new \FOO\$name; 
    } 

} 

我得到一個解析語法錯誤(如NetBeans的指示)。這是可能的或好的做法? 感謝

編輯: 分析錯誤:「後\期望標識符意想不到的變量名」

+1

那麼,語法錯誤可能是'return new \ FOO \ $ name'中的單個雙引號;'(不匹配...)。 – arkascha

+0

不...這是一個錯字,現在修好了 –

回答

1

要使用一個變量名實例類,你需要把整個名稱,包括命名空間,到變量:

$name = "Foo\\$name"; // note: no leading backslash 
return new $name; 
+0

爲什麼?沒有主要的反斜槓?當然,一個類可以通過其完全限定的名稱來引用!相反:在上面例如,你的建議會導致類名稱爲'\ FOO \ FOO \ '...... – arkascha

+0

不,它不會。變量類名始終是FQN。它們與當前名稱空間不相關,它們始終從頂部開始。這與'use Foo \ Bar'語句中不使用反斜槓相同,它們總是FQN。 – deceze

+0

啊,謝謝,我必須嘗試...聽起來像一個奇怪的邏輯,但它可能解釋我以前遇到的一些奇怪的效果;-) – arkascha