2011-02-07 59 views
3

我想動態創建對象。現在,我手動創建他們這樣我可以動態設置新的對象名稱

$obj1 = new Prefix_Myobj(); 
$obj2 = new Prefix_Other(); 
$obj3 = new Prefix_Another(); 

如何設置Prefix_動態後的部分?我嘗試過但不起作用

$name = 'Myobj'; 
$obj1 = new Prefix_{$name}(); 
+0

我太生疏了,無法提供完整的答案。雖然有變量變量和`$$`運算符 – Earlz 2011-02-07 19:39:27

+0

我刪除了我的答案。很好,彼得。這是動態類型規範,而不是動態對象命名。我正在讀這個非常錯誤的。 – Andy 2011-02-07 21:01:47

回答

9

您需要創建一個指定整個類名的字符串。

$name = 'Myobj'; 
$classname = 'Prefix_'.$name; 
$obj1 = new $classname(); 

但是,它可能是更好的設計,建立一個類的註冊表類,而不是像這樣即時生成類名。

0

爲什麼你需要這個?也許你的問題有更好的解決方案;多重或依賴注入等...

0

重要的是要說,如果你的類是在一個特定的命名空間,你需要通知完整的路徑。例如:

namespace my\path\app; 

class MyClass { 

    $name = 'Myobj'; 
    $classname = 'my\path\app\Prefix_' . $name; 
    $obj1 = new $classname(); 
}