$ obj = КЛАС :: 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
існує, але не ініціалізується, як це було б у системі, описаній у питанні. Краще уникати таких проміжних станів, оскільки ви не можете гарантувати, що об’єкт завжди буде правильно використаний.