निम्नलिखित उदाहरण पर विचार करें जो डेटाबेस ऑब्जेक्ट के उदाहरण तक पहुंचने के लिए सिंगलटन डिज़ाइन पैटर्न का उपयोग करता है। (इसका उद्देश्य एक ही कनेक्शन को बार-बार एप्लिकेशन के माध्यम से पुन:उपयोग करना है)
class Database {
protected static $_dbh;
const HOST = 'localhost';
const DATABASE = 'dbname';
const USERNAME = 'username';
const PASSWORD = 'password';
//declare the constructor as private to avoid direct instantiation.
private function __construct() { }
//access the database object through the getInstance method.
public static function getInstance() {
if(!isset($_dbh)) {
#Connection String.
self::$_dbh = new PDO('mysql:host='.self::HOST.';dbname='.self::DATABASE,self::USERNAME,self::PASSWORD);
self::$_dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return self::$_dbh;
}
}
अब अगर मुझे आवेदन में कहीं भी कक्षा का उपयोग करना है तो मैं इसे इस तरह आसान कर दूंगा।
require_once('database.php');
$dbh = Database::getInstance();
$sth = $dbh->query('SELECT * FROM sometable');
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
Database::getInstance();
. पर कॉल करें स्थैतिक विधि का उपयोग करता है। यह मूल रूप से क्या करता है यह आपको कंस्ट्रक्टर को निजी घोषित करके ऑब्जेक्ट को सीधे इंस्टेंट करने से रोकता है, और इसके बजाय यह जांचता है कि क्या ऑब्जेक्ट पहले से ही इंस्टेंट है। यदि सत्य है तो पहले से ही तत्काल वस्तु वापस कर दें। अन्यथा नया बनाएं और नव निर्मित वस्तु लौटाएं। यह सुनिश्चित करता है कि पूरे एप्लिकेशन में एक ही डेटाबेस कनेक्शन का पुन:उपयोग किया जाए।