$ obj = CLASS :: getInstance (). Kemudian kami menyuntikkan dependensi menggunakan setter dan melakukan inisialisasi mulai menggunakan $ obj-> initInstance ();
Saya pikir Anda membuat ini lebih sulit daripada yang seharusnya. Kami dapat menyuntikkan dependensi dengan baik melalui konstruktor - dan jika Anda memiliki banyak dependensi, cukup gunakan struktur seperti kamus sehingga Anda dapat menentukan yang mana yang ingin Anda gunakan:
$obj = new CLASS(array(
'Frobnicator' => (),
'Foonicator' => (),
));
Dan di dalam konstruktor, Anda dapat memastikan konsistensi seperti:
if (!array_key_exists('Frobnicator', $args)) {
throw new Exception('Frobnicator required');
}
if (!array_key_exists('Foonicator', $args)) {
$args['Foonicator'] = new DefaultFoonicator();
}
$args
kemudian dapat digunakan untuk mengatur anggota pribadi sesuai kebutuhan.
Ketika dilakukan sepenuhnya dalam konstruktor seperti itu, tidak akan pernah ada keadaan peralihan di mana $obj
ada tetapi tidak diinisialisasi, karena akan ada dalam sistem yang dijelaskan dalam pertanyaan. Lebih baik menghindari keadaan perantara seperti itu, karena Anda tidak dapat menjamin objek selalu akan digunakan dengan benar.