Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

PHP सिंगलटन डेटाबेस कनेक्शन पैटर्न

singletons का उपयोग करना PHP में बुरा अभ्यास माना जाता है। मेरे अनुभव से उनके साथ सबसे अधिक समस्याग्रस्त मुद्दा यूनिट परीक्षण हैं। यह सुनिश्चित करना कठिन है कि सिंगलटन का परीक्षण करते समय दो परीक्षण स्वतंत्र होते हैं।

मैं डीबी ऑब्जेक्ट बनाने वाले कोड को "केवल एक उदाहरण मौजूद होना चाहिए" बाधा के लिए ज़िम्मेदारी सौंप दूंगा।

इसके अलावा मेरे लिए ऐसा लगता है कि अन्य भाषाओं के विपरीत PHP में सिंगलटन कैसे काम करते हैं, इस बारे में गलतफहमी है:यदि आपके पास उदाहरण के लिए 10.000 समवर्ती अनुरोध हैं, तो प्रत्येक अनुरोध एक अलग PHP प्रक्रिया या थ्रेड में चलता है, जिसका अर्थ है कि वे सभी का अपना होगा "सिंगलटन" का उदाहरण, एक से अधिक अनुरोध के लिए इस ऑब्जेक्ट का कोई साझाकरण नहीं है (सामान्य वेब बैकएंड परिदृश्यों में PHP चलाते समय)

PHP में कोई "कनेक्शन पूलिंग" नहीं है, लेकिन आप mysqli . का उपयोग कर सकते हैं mysql के लिए लगातार कनेक्शन। इसे p: . पास करके हासिल किया जा सकता है होस्टनाम के सामने mysqli बनाते समय। यह यहां मदद कर सकता है, लेकिन इसे सावधानी से संभालें (अर्थात पहले दस्तावेज़ीकरण पढ़ें )

हालाँकि, केवल सिद्धांत के लिए, PHP में एक सिंगलटन को इस तथ्य के बारे में पता होना चाहिए कि कोई व्यक्ति clone का उपयोग कर सकता है . मतलब आपके मामले में ऐसा करना संभव होगा:

$db = DB::getInstance();
$db2 = clone $db; 

इससे बचने के लिए आप __clone() . को लागू कर सकते हैं इस तरह की विधि:

public function __clone() {
    throw new Exception("Can't clone a singleton");
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ubuntu ARMHF पर sys_exec के बिना mySQL ट्रिगर के साथ बाहरी स्क्रिप्ट को कॉल करें

  2. MySQL:प्रति पृष्ठ कितने प्रश्न बहुत अधिक हैं?

  3. सी # MySQL दूसरा DataReader DataReader में जबकि लूप

  4. कंस्ट्रक्टर इन द सेलेक्ट क्लॉज का उपयोग करके एकाधिक तालिका के चयनित कॉलम के लिए एचक्यूएल जॉइन क्वेरी कैसे लिखें

  5. CSV से पढ़ने और SQL क्वेरी निष्पादित करने के लिए एक PHP फ़ाइल लिखना