2012-05-29 16 views
7

動的に作成されたクラス名のオブジェクトをインスタンス化しようとしています。 私は名前空間を使用しています。インスタンス化するクラスは同じ名前空間にあります。 examplifyする現在の名前空間で文字列でクラスをインスタンス化する

、これは正常に動作します:

namespace MyNamespace; 

new MyClass; // MyNamespace\MyClass instantiated 

これがないのに対し:

namespace MyNamespace; 

$class = 'MyClass'; 
new $class; // Class 'MyClass' not found 

が、これはバグですか、私が何か間違ったことをやっていますか?

答えて

13

newの文字列を使用する場合は、完全修飾クラス名を指定する必要があります。

あなたは__NAMESPACE__でこれを行うことができます。

$fullclass = __NAMESPACE__ . '\\' . $class; 
new $fullclass; 

new operator__NAMESPACE__魔法定数のマニュアルを参照してください。

+0

こんにちは、有効です。参照のためにあなたのソースにリンクできますか?ありがとう:-) – jgivoni

+0

@jgivoni私の答えに追加されました。 – lonesomeday

+0

いいね、リンクありがとう。しかし、私は今、あなたが「完全修飾クラス名」と言うときに、「\」で始めるべきではないと思っていますか?たぶんこのような場合に、先行する '\'が暗示される可能性がありますか? – jgivoni

関連する問題