$ obj = CLASS :: getInstance () จากนั้นเราฉีดการอ้างอิงโดยใช้ setters และทำการเริ่มต้นการเริ่มต้นโดยใช้ $ 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
มีอยู่ แต่ไม่ได้เริ่มต้นเนื่องจากจะมีในระบบที่อธิบายไว้ในคำถาม เป็นการดีกว่าที่จะหลีกเลี่ยงสถานะตัวกลางเช่นนี้เนื่องจากคุณไม่สามารถรับประกันได้ว่าวัตถุจะถูกใช้อย่างถูกต้องเสมอ