2011-02-07 2 views
3

オブジェクトを動的に作成したいと思います。今すぐこのように手動で作成しています新しいオブジェクト名を動的に設定することができます

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

Prefix_の後に動的に部品を設定するにはどうすればよいですか?私はこれを試しても動作しませんでした。

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

私は完全な答えを提供するにはあまりにも錆びます。可変変数と何かと '$$'演算子 – Earlz

+0

答えを削除しました。良いキャッチー、ピーター。これは、動的オブジェクトの命名ではなく、動的型指定です。私はこれをひどく間違って読んでいた。 – Andy

答えて

9

クラス名全体を指定する文字列を作成する必要があります。

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

ただし、このようにオンザフライでクラス名を生成するのではなく、ソートのクラスレジストリを作成する方がよい場合があります。

+1

クラスが特定の名前空間にある場合は、完全なパスを通知する必要があります –

0

なぜこれが必要ですか?たぶんあなたの問題のためのより良い解決策があります。マルチトンまたは依存性注入など...

0

クラスが特定の名前空間にある場合は、完全なパスを通知する必要があります。例:

namespace my\path\app; 

class MyClass { 

    $name = 'Myobj'; 
    $classname = 'my\path\app\Prefix_' . $name; 
    $obj1 = new $classname(); 
} 
関連する問題