$ obj = CLASS :: getInstance (). Dann injizieren wir Abhängigkeiten mit Setzern und starten die Initialisierung mit $ obj-> initInstance ();
Ich denke, Sie machen das schwieriger, als es sein muss. Abhängigkeiten können problemlos über den Konstruktor eingefügt werden. Wenn Sie viele davon haben, verwenden Sie einfach eine wörterbuchähnliche Struktur, damit Sie angeben können, welche Sie verwenden möchten:
$obj = new CLASS(array(
'Frobnicator' => (),
'Foonicator' => (),
));
Und innerhalb des Konstruktors können Sie die Konsistenz folgendermaßen sicherstellen:
if (!array_key_exists('Frobnicator', $args)) {
throw new Exception('Frobnicator required');
}
if (!array_key_exists('Foonicator', $args)) {
$args['Foonicator'] = new DefaultFoonicator();
}
$args
kann dann verwendet werden, um private Mitglieder nach Bedarf festzulegen.
Wenn dies vollständig innerhalb des Konstruktors geschieht, wird es niemals einen Zwischenzustand geben, in dem es $obj
existiert, der jedoch nicht initialisiert wird, wie dies bei dem in der Frage beschriebenen System der Fall wäre. Es ist besser, solche Zwischenzustände zu vermeiden, da Sie nicht garantieren können, dass das Objekt immer korrekt verwendet wird.