Overvej følgende eksempel, som bruger singleton-designmønsteret til at få adgang til forekomsten af databaseobjektet. (Formålet med dette er at genbruge den samme forbindelse igen og igen gennem hele applikationen)
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;
}
}
nu, hvis jeg er nødt til at gøre brug af klassen hvor som helst i applikationen, ville jeg ganske enkelt gøre det sådan her.
require_once('database.php');
$dbh = Database::getInstance();
$sth = $dbh->query('SELECT * FROM sometable');
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
kaldet til Database::getInstance();
bruger statisk metode. hvad dette grundlæggende gør, er, at det begrænser dig fra direkte at instansiere objektet ved at erklære konstruktøren som privat, og i stedet tjekker den, om objektet allerede er instantieret. hvis det er sandt, så returner allerede instansieret objekt. ellers opret nyt og returner nyoprettet objekt. dette sikrer, at den samme databaseforbindelse genbruges gennem hele applikationen.