$ obj = CLASS :: getInstance()。次に、セッターを使用して依存関係を注入し、$ obj-> initInstance()を使用して初期化を開始します。
これを必要以上に難しくしていると思います。コンストラクターを介して依存関係をうまく挿入できます。多くの依存関係がある場合は、辞書のような構造を使用するだけで、使用するものを指定できます。
$obj = new CLASS(array(
'Frobnicator' => (),
'Foonicator' => (),
));
そして、コンストラクタ内で、次のような一貫性を確保できます。
if (!array_key_exists('Frobnicator', $args)) {
throw new Exception('Frobnicator required');
}
if (!array_key_exists('Foonicator', $args)) {
$args['Foonicator'] = new DefaultFoonicator();
}
$args
その後、必要に応じてプライベートメンバーを設定するために使用できます。
このようにコンストラクタ内で完全に実行すると、存在する中間状態は$obj
存在しませんが、質問で説明されているシステムのように初期化されません。オブジェクトが常に正しく使用されることを保証できないため、このような中間状態を回避することをお勧めします。