gpt4 book ai didi

php - 一个类只有一个实例

转载 作者:行者123 更新时间:2023-12-03 07:33:31 25 4
gpt4 key购买 nike

我想知道如何获取以下数据库连接的一个实例。

例如,假设这是我在文件 Database.php 中的类

public class Database {
public function __construct() {
try {
// PDO Here
print("Connected!");
} catch (PDOException $e) {
die($e->getMessage());
}
}
}

index.php

Database();
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();

只会打印“已连接!”一次,因为实例变量已被实例化。

我建议您阅读Singleton Pattern如果您还没有听说过。看看他们展示的示例代码,虽然不是 PHP,但应该很容易理解。

编辑:

如果您想让getInstance函数变得简短,您可以执行以下操作。

return !isset(self::$instance) ? self::$instance = new self : self::$instance;

关于php - 一个类只有一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28730071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com