首页 > 解决方案 > 如何使用单例模式在 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"));

标签: phpmysqldatabasesingleton

解决方案


推荐阅读