$ obj = CLASS :: 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
मौजूद है लेकिन आरंभिक नहीं है, क्योंकि प्रश्न में वर्णित प्रणाली में होगा। इस तरह के मध्यवर्ती राज्यों से बचने के लिए बेहतर है, क्योंकि आप इस बात की गारंटी नहीं दे सकते हैं कि वस्तु हमेशा सही तरीके से उपयोग होने वाली है।