Php 一个类只有一个实例
我想知道如何获得以下db连接的一个实例 例如,假设这是文件Database.php中的我的类Php 一个类只有一个实例,php,oop,Php,Oop,我想知道如何获得以下db连接的一个实例 例如,假设这是文件Database.php中的我的类 public class Database { public function __construct() { try { // PDO Here print("Connected!"); } catch (PDOException $e) { die($e->getMessage());
public class Database {
public function __construct() {
try {
// PDO Here
print("Connected!");
} catch (PDOException $e) {
die($e->getMessage());
}
}
}
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();
Database();
Database::getInstance();
Database::getInstance();
结果
已连接!连接代码>
我只想实例化该类一次,即使我调用它两次。您可以使用静态变量将数据库类分配给,然后使用if语句检查该变量是否已实例化
有很多方法可以做到这一点,但我会这样做
Database.php
public class Database {
public function __construct() {
try {
// PDO Here
print("Connected!");
} catch (PDOException $e) {
die($e->getMessage());
}
}
}
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();
Database();
Database::getInstance();
Database::getInstance();
将只打印一次“Connected!”,因为实例变量已实例化
如果你没听说过,我建议你读一读。看看他们展示的示例代码,虽然不是用PHP编写的,但应该很容易理解
编辑:
如果您想缩短getInstance
函数,可以执行以下操作
return !isset(self::$instance) ? self::$instance = new self : self::$instance;
阅读关于单例模式。阅读关于单例模式。该死,你们两个都赢了!但是,是的,单身模式完全描述了你们的问题。谢谢你们从来没听说过,但现在我知道了。