私のプロジェクトでは、データを処理して結果を処理しています。次のような抽象クラスがあります。
class AbstractInterpreter
{
public function interprete( $data )
{
throw new Exception('Abstract Parent, nothing implemented here');
}
}
そして、:のさまざまな異なる実装がありAbstractInterpreter
ます。
class FooInterpreter extends AbstractInterpreter
{
public function interprete( $data )
{
return "resultFoo";
}
}
class BarInterpreter extends AbstractInterpreter
{
public function interprete( $data )
{
return "resultBar";
}
}
私の呼び出しコードは、通訳を作成し、結果を収集します。
//this is the data we're working with
$data = "AnyData";
//create the interpreters
$interpreters = array();
$foo = new FooInterpreter();
$bar = new BarInterpreter();
$interpreters[] = $foo;
$interpreters[] = $bar;
//collect the results
$results = array();
foreach ($interpreters as $currentInterpreter)
{
$results[] = $currentInterpreter->interprete($data);
}
私は現在、ますます多くのインタープリターを作成していて、コードが乱雑になっています...インタープリターごとに、特定のものを追加する必要があり、include_once(..)
それをインスタンス化して、に配置する必要があり$interpreters
ます。
さて、最後に私の質問
をします。特定のディレクトリにあるすべてのインタプリタを自動的に含めてインスタンス化し、それらを?に配置することは可能$interpreters
ですか?
他の言語では、これはある種のプラグインの概念になります。
私はのさまざまな実装を作成AbstractInterpreter
し、それらを特定のサブディレクトリに配置すると、ソフトウェアがそれらを自動的に使用します。終了するとすぐにインタープリターをロードするコードを変更する必要はありません。