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

Python小叮当 Python小叮当 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

下面这个类是记录一下,说不定之后写自己的框架的时候会用到。执行 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....
    }

}
...全文
评论
收藏 已收藏
分享
返回顶部