シングルトン デザイン パターンを使用してデータベース オブジェクトのインスタンスにアクセスする次の例を考えてみましょう (この目的は、アプリケーション全体で同じ接続を何度も再利用することです)。
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 の場合、既にインスタンス化されたオブジェクトを返します。そうでなければ、新しく作成し、新しく作成されたオブジェクトを返します。これにより、同じデータベース接続がアプリケーション全体で再利用されます。