Hãy xem xét ví dụ sau sử dụng mẫu thiết kế singleton để truy cập phiên bản của đối tượng cơ sở dữ liệu. (Mục đích của việc này là sử dụng lại cùng một kết nối thông qua ứng dụng)
Cơ sở dữ liệu lớpclass 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;
}
}
bây giờ nếu tôi phải sử dụng lớp ở bất kỳ đâu trong ứng dụng, tôi sẽ đơn giản làm như thế này.
require_once('database.php');
$dbh = Database::getInstance();
$sth = $dbh->query('SELECT * FROM sometable');
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
lệnh gọi đến Database::getInstance();
sử dụng phương pháp tĩnh. về cơ bản điều này làm là nó hạn chế bạn khởi tạo trực tiếp đối tượng bằng cách khai báo phương thức khởi tạo là private và thay vào đó nó sẽ kiểm tra xem đối tượng đã được cài đặt sẵn chưa. nếu đúng thì trả về đối tượng đã được khởi tạo. khác tạo mới và trả về đối tượng mới được tạo. điều này đảm bảo rằng cùng một kết nối cơ sở dữ liệu được sử dụng lại thông qua ứng dụng.