PHP では、変数からクラスをインスタンス化する機能がさまざまなシナリオで役立ちます。この機能は、物議を醸している eval() メソッドを超えたアプローチで実現できます。
問題:
次のコードを考えてみましょう:
$var = 'bar'; $bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');
Thisこのコードは、変数をクラス名として使用してクラスをインスタンス化することを目的としています。ただし、構文が正しくありません。
解決策:
eval() を使用せずに動的クラスのインスタンス化を実現するには、まずクラス名を変数に格納します。
$classname = $var.'Class'; $bar = new $classname("xyz");
このアプローチでは、クラス名が変数 ($classname) に割り当てられ、$classname 変数を使用してそのクラスの新しいインスタンスが作成されます。
使用法:
この手法は一般に Factory パターン内で使用され、正確なクラス名を指定せずにオブジェクトを作成できます。また、実行時にクラス名を動的に生成または構成できる依存関係注入フレームワーク内のアプリケーションも見つかります。
さらに理解するには、PHP の名前空間と動的言語機能に関するドキュメントを参照してください。
以上がeval() を使用せずに PHP で動的クラスのインスタンス化を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。