我想知道如何获得以下数据库连接的一个实例。
例如,假设这是我在文件 Database.php 中的类
public class Database {
public function __construct() {
try {
// PDO Here
print("Connected!");
} catch (PDOException $e) {
die($e->getMessage());
}
}
}
Run Code Online (Sandbox Code Playgroud)
索引.php
Database();
Database();
Run Code Online (Sandbox Code Playgroud)
结果
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;
}
}
Run Code Online (Sandbox Code Playgroud)
索引.php
Database::getInstance();
Database::getInstance();
Run Code Online (Sandbox Code Playgroud)
只会打印“已连接!” 一次是因为实例变量已被实例化。
如果您还没有听说过单例模式,我建议您阅读它。看看他们展示的示例代码,它不是用 PHP 写的,但应该很容易理解。
编辑:
如果您想getInstance缩短功能,您可以执行以下操作。
return !isset(self::$instance) ? self::$instance = new self : self::$instance;
Run Code Online (Sandbox Code Playgroud)