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