php - 如何使用单例模式在 php 中正确编写数据库类?
问题描述
今天我对我的数据库类做了一些修改。其中之一是使用单例模式,但我不能 100% 确定我是否做得对,因为我以前从未这样做过。
它似乎可以工作,但仍然不确定它是否能做应该做的事情。
这是一个示例。你怎么看?欢迎任何建议:)
<?php
class Database {
protected static $instance;
private static $dsn = DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME;
private static $username = DB_USER;
private static $password = DB_PASS;
private function __construct() {
try {
self::$instance = new PDO(self::$dsn, self::$username, self::$password);
self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
self::$instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOException $e) {
die($e->getMessage());
}
}
private function __clone() { }
public static function getInstance() {
if(!self::$instance) {
new Database();
}
return self::$instance;
}
public function read($query, $data = [])
{
$DB = Database::getInstance();
$stm = $DB->prepare($query);
if($stm) {
$check = $stm->execute($data);
if($check) {
$result = $stm->fetchAll(PDO::FETCH_OBJ);
}
}
}
if(is_array($result) && count($result) > 0) {
return $result;
}
return false;
}
}
// test
echo '<pre>';
print_r(Database::read("SELECT * FROM table"));
解决方案
推荐阅读
- node.js - 无法从 Node.js 中的 Amazon-S3 获取签名 URL
- ios - Apple Review 无法获得 Apple 健康许可
- mysql - 一个查询中的多个 COUNT(DISTINCT CAST(field AS DATE)
- ios - 从另一个控制器使用 UITextField 添加文本时,它不会显示在 UITableView
- javascript - Google Ads 脚本 - 将 Logger.log 内容发送到电子邮件?
- java - 在 Gradle Java 应用程序中没有拾取 Log4j2.properties 文件?
- php - 如何在phtml中创建垂直文本
- php - PHP & MySQL:如何将用户输入与数据库中的数据进行比较?
- python - Python。将字符串转换为包含 numpy 数组的字典
- python - 如何使用 lambda 和 map_fn 在 4d 张量的每个 2d 切片上应用 keras 层?