0

私はちょうど次の問題で立ち往生しました。クラスを作成しようとしていますが、機能していません。クラスを構築するとき、名前空間と変数を使用します。これは、変数を(名前空間の)バックスラッシュの後ろに配置する必要があるため、エラーが発生するためです。クラスを定義するコードの例を次に示します。

$className = 'Help';
$controller = new \controller\$className;

クラス名は変数で定義されています。上記のサンプルコードでは、「ヘルプ」に設定しました。その前にあるクラスを構築するとき、それはそれ\controller\がその名前空間にある原因です。名前空間を削除すると、次のようになります。

$controller = new $className;

それは機能します。この問題は、作成するクラス名を含む変数の前に円記号があることが原因である可能性があります。use controller;クラスを含むファイルがコンストラクター内にロードされ、ファイルがロードされた直後にクラスが構築されるため、コードの先頭に追加できません。このuse関数は、メソッド内ではなく、ファイルの先頭でのみ使用できると思います。

誰かが私を助けてくれることを願っています。

よろしくお願いします、TimVisée

4

2 に答える 2

3

最初の例は無効な構文です。代わりに、次のようなものが必要になります。

$className = '\controller\Help';
$controller = new $className();
于 2013-02-05T19:11:45.947 に答える
3

完全修飾クラス名を変数に設定し、それを使用して新しいオブジェクトをインスタンス化します。

$className = '\controller\Help';
$controller = new $className;
于 2013-02-05T19:12:02.040 に答える