请考虑以下使用单例设计模式访问数据库对象实例的示例.(目的是在应用程序中一次又一次地重用相同的连接)
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()的调用;使用静态方法.这基本上做的是它通过将构造函数声明为私有来限制您直接实例化对象,而是检查对象是否已经实例化.如果为true则返回已经实例化的对象. else创建new并返回新创建的对象.这可以确保在整个应用程序中重用相同的数据库连接.