मैं एकल से वैश्विक या बेहतर से बेहतर सिंगलटन के बारे में कोई चर्चा नहीं करना चाहता हूं। मैंने एसओ पर समान विषयों के बारे में दर्जनों प्रश्न पढ़े, लेकिन मैं इस विशिष्ट प्रश्न के उत्तर के साथ नहीं आया, इसलिए मुझे आशा है कि कोई इस सवाल का जवाब देकर मुझे (या अधिक) वास्तविक सरल उदाहरण, और सैद्धांतिक चर्चाओं के साथ जवाब दे सकता है।PHP - एक डीबी अबास्ट्रक्शन परत स्थैतिक वर्ग बनाम सिंगलटन ऑब्जेक्ट का उपयोग करती है?
मेरे ऐप में मैं और कोड mysql_connect/mysql_select_db/mysql...
मैं कक्षा लिख सकता है में हर जगह लिखने के बिना डीबी पर कार्य करने के लिए सार डीबी परत को ठेठ डीबी वर्ग या तो एक स्थिर वर्ग के रूप में:
class DB
{
private static $connection = FALSE; //connection to be opened
//DB connection values
private static $server = NULL; private static $usr = NULL; private static $psw = NULL; private static $name = NULL;
public static function init($db_server, $db_usr, $db_psw, $db_name)
{
//simply stores connections values, without opening connection
}
public static function query($query_string)
{
//performs query over alerady opened connection, if not open, it opens connection 1st
}
...
}
या एक सिंगलटन के रूप में:
class DBSingleton
{
private $inst = NULL;
private $connection = FALSE; //connection to be opened
//DB connection values
private $server = NULL; private $usr = NULL; private $psw = NULL; private $name = NULL;
public static function getInstance($db_server, $db_usr, $db_psw, $db_name)
{
//simply stores connections values, without opening connection
if($inst === NULL)
$this->inst = new DBSingleton();
return $this->inst;
}
private __construct()...
public function query($query_string)
{
//performs query over already opened connection, if connection is not open, it opens connection 1st
}
...
}
तब मेरे एप्लिकेशन में के बाद अगर मैं डीबी क्वेरी करना चाहते हैं मैं
//Performing query using static DB object
DB:init(HOST, USR, PSW, DB_NAME);
DB::query("SELECT...");
//Performing query using DB singleton
$temp = DBSingleton::getInstance(HOST, USR, PSW, DB_NAME);
$temp->query("SELECT...");
मेरे लिए सिंगलटन केवल लाभ static
के रूप में वर्ग के प्रत्येक विधि की घोषणा से बचने के लिए मिल गया है कर सकता है। मुझे यकीन है कि आप में से कुछ EXAMPLE को विशिष्ट मामले में सिंगलटन के वास्तविक लाभ के लिए दे सकते हैं। अग्रिम में धन्यवाद।
जो कोई भी मतदान किया एक टिप्पणी छोड़ और कृपया समझाएं सकता है। –
डेटाबेस क्लास को सिंगलटन बनाने या स्थिर वर्ग के रूप में व्यवहार करने की बिल्कुल आवश्यकता नहीं है। मेरा मतलब है कि यह किस उद्देश्य से सेवा करता है? यदि आप एक ऐसा एप्लिकेशन बनाना चाहते हैं जो एक साथ दो अलग-अलग डेटाबेस कनेक्शन की आवश्यकता है, तो आप मूल रूप से पहले ही खराब हो गए हैं। और आलसी प्रारंभिक (वास्तविक कनेक्शन का) एक वर्ग के साथ पूरी तरह से संभव है जो कई उदाहरणों की अनुमति देता है। –
@fireeyedboy: आपके लिए धन्यवाद टिप्पणी लेकिन मैं वास्तव में आपके बिंदु को समझ नहीं पा रहा हूं। अंत में आपको लगता है कि यह एक सिंगलटन या स्थैतिक वर्ग बेहतर है और क्यों? –