0
点赞
收藏
分享

微信扫一扫

闲暇之余用PHP封装PDO之单例模式

钵仔糕的波波仔 2022-02-13 阅读 35

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

更多的 php 怀旧小知识,可关注【php开发者社区】

举报

相关推荐

0 条评论