我想知道如何获得以下数据库连接的一个实例。
例如,假设这是我在文件Database.php 中的类
public class Database {
public function __construct() {
try {
// PDO Here
print("Connected!");
} catch (PDOException $e) {
die($e->getMessage());
}
}
}
index.php
Database();
Database();
结果
Connected!Connected!
即使调用两次,我也只想实例化一次类。
您可以使用一个静态变量将Database类分配给,然后使用if语句检查该变量是否已实例化。
有很多方法可以做到这一点,但我会这样做。
数据库.php
public class Database
{
private static $instance;
private function __construct()
{
try {
// PDO Here
print("Connected!");
} catch (PDOException $e) {
die($e->getMessage());
}
}
public static function getInstance()
{
// Check is $_instance has been set
if(!isset(self::$instance))
{
// Creates sets object to instance
self::$instance = new Database();
}
// Returns the instance
return self::$instance;
}
}
index.php
Database::getInstance();
Database::getInstance();
将只打印"Connected!"一次,因为实例变量已实例化。
如果你没有听说过Singleton Pattern,我建议你阅读它。看看它们显示的示例代码,它不是用PHP编写的,但应该很容易理解。
编辑:
如果您想缩短getInstance
函数,可以执行以下操作。
return !isset(self::$instance) ? self::$instance = new self : self::$instance;