$ obj = LỚP :: getInstance (). Sau đó, chúng tôi thêm các phụ thuộc bằng setters và thực hiện khởi tạo bằng cách sử dụng $ obj-> initInstance ();
Tôi nghĩ rằng bạn đang làm điều này khó khăn hơn nó cần phải được. Chúng tôi có thể thêm các phụ thuộc tốt thông qua hàm tạo - và nếu bạn có nhiều phần tử, chỉ cần sử dụng cấu trúc giống như từ điển để bạn có thể chỉ định những gì bạn muốn sử dụng:
$obj = new CLASS(array(
'Frobnicator' => (),
'Foonicator' => (),
));
Và trong hàm tạo, bạn có thể đảm bảo tính nhất quán như vậy:
if (!array_key_exists('Frobnicator', $args)) {
throw new Exception('Frobnicator required');
}
if (!array_key_exists('Foonicator', $args)) {
$args['Foonicator'] = new DefaultFoonicator();
}
$args
sau đó có thể được sử dụng để thiết lập các thành viên tư nhân khi cần thiết.
Khi được thực hiện hoàn toàn trong hàm tạo như vậy, sẽ không bao giờ có trạng thái trung gian $obj
tồn tại nhưng không được khởi tạo, như sẽ có trong hệ thống được mô tả trong câu hỏi. Tốt hơn hết là tránh các trạng thái trung gian như vậy, vì bạn không thể đảm bảo đối tượng sẽ luôn được sử dụng chính xác.