自己用PHP封装PDO之单例模式

sinmu phper 2022-02-13 14:06:32

下面这个类是记录一下,说不定之后写自己的框架的时候会用到。执行 sql 的逻辑需要自己diy哦。

连接数据库的地方也可以进行优化

主要功能:

  1. 单例模式(懒汉模式)
  2. 防止克隆

调用方式如下

$res = Db::getInstance();

DB类如下

Class DB
{

    //单例数据库类
    private static $_instance;
    private $pdo;
    private $db_host = "127.0.0.1";
    private $db_user = "root";
    private $db_pwd = "123456";
    private $db_name = "test";
    private $charset = "utf8";
    private $db_port = "3306";



    //阻止克隆对象
    private function __clone()
    {
    }

    //阻止new对象 private 修饰
    private function __construct()
    {
        $this->connect();
        $this->setCharSet();
    }

    /**
     * 连接数据库
     */
    private function connect()
    {
        try {
            $this->pdo = new PDO("mysql:host=$this->db_host;port=$this->db_port;dbname=$this->db_name", $this->db_user, $this->db_pwd);
            // echo "连接成功";
        } catch (Exception $e) {
            throw new Exception('MySql连接错误!');
            // 写入日志逻辑...
            file_put_contents(__DIR__ . '/log/'.strftime('%Y-%m-%d').'.log',$e->getMessage().PHP_EOL,FILE_APPEND);
            return false;
        }

    }

    //初始化Db类只需执行该静态方法
    public static function getInstance(): Db
    {
        if (!(self::$_instance instanceof self)){
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    /**
     * 设置字符集
     */
    private function setCharSet(){
        $this->pdo->query($this->charset);
    }

    // 执行sql语句, 无返回结果
    public function exec($sql){
        // diy......
    }

    // 执行select 语句,有返回结果
    public function select(){
        // diy....
    }

}
...全文
157 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

15

社区成员

发帖
与我相关
我的任务
社区描述
我可以对一件事情坚持下去吗
社区管理员
  • Python小叮当
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

佛系记录php的相关知识

试试用AI创作助手写篇文章吧