8

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

例として、これは正常に機能します。

namespace MyNamespace;

new MyClass; // MyNamespace\MyClass instantiated

これはそうではありませんが:

namespace MyNamespace;

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

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

4

1 に答える 1

13

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

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

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

new演算子__NAMESPACE__マジック定数については、ドキュメントを参照してください。

于 2012-05-29T12:54:31.177 に答える