मेरे पास स्थैतिक वर्ग विधियों का एक सेट है। मेरे पास ऑब्जेक्ट वेरिएबल $ डीबी में संग्रहीत स्क्रिप्ट में मौजूदा डेटाबेस कनेक्शन भी है। मैं उन स्थैतिक वर्ग विधियों को कैसे कॉल करूं और उन्हें कक्षा विधि पर पैरामीटर के रूप में हर बार इस चर को पास किए बिना उस $ डीबी ऑब्जेक्ट का उपयोग करने दें?PHP: स्थैतिक वर्ग विधियों के लिए मौजूदा डेटाबेस कनेक्शन कैसे पास करें?
उदाहरण के लिए, अभी मैं एक वैश्विक, दुर्भाग्य से उपयोग करने के लिए हो रही है:
class Foo {
public static function Bar() {
global $DB;
return $DB->DSN_STRING;
}
}
यह है कि मैं अपने स्थिर वर्ग की जरूरत है अपने आप में एक दिनचर्या है कि किसी तरह के बिना $ DB कनेक्शन हो जाता है के साथ कॉल करने के लिए इसे फिर से स्थापित करें। नोट मैं इसे स्थैतिक वर्ग में इंजेक्ट नहीं कर सकता क्योंकि यह तत्काल नहीं है।
बेशक समस्या हल हो जाती है अगर मैं एक स्थिर वर्ग से नियमित कक्षा में स्विच करता हूं और अपनी $ Foo ऑब्जेक्ट को तुरंत चालू करता हूं। मैं फिर सार्वजनिक चर पर एक सेटिंग के रूप में $ डीबी var इंजेक्ट कर सकता था। या $ डीबी var प्राप्त करने के लिए एक सार्वजनिक विधि जोड़ें और फिर $ Foo ऑब्जेक्ट का एक निजी var सेट करें। या, एक वर्ग निर्माता $ डीबी var स्वीकार करते हैं और $ Foo ऑब्जेक्ट का एक निजी var सेट करते हैं। लेकिन सभी 3 तकनीकों की आवश्यकता है कि मैं एक स्थिर वर्ग से नियमित कक्षा में स्विच करूं।
कुछ लोगों ने रजिस्ट्री पैटर्न या सिंगलटन पैटर्न नामक कुछ का उल्लेख किया है (मुझे लगता है कि यह वही बात है? सुनिश्चित नहीं है)। क्या मुझे इस समस्या को कुशलतापूर्वक हल करने की आवश्यकता है?
सबसे अधिक बात यह है कि मैं "वैश्विक $ डीबी" कहने से बचता हूं क्योंकि लोग इसके बारे में चिंतित हैं।
यह * बिल्कुल * मुझे जो चाहिए था, और मुझे नहीं पता था कि एक स्थिर वर्ग इसके अंदर एक वस्तु दृढ़ता बनाए रख सकता है। – Volomike
सिंगलेट्स के साथ अच्छा समय। :) सहायता करके हमें खुशी होगी। – zombat