单例模式的定义:保证一个类只有一个实例,并提供一个访问它的全局访问点。这就意味着这个类只实例化一次,并做好防止外部再次实例化的措施,比如克隆私有化,构造函数私有化,还要把实例化好的资源保存起来,供外部使用。

这样做的目的是减少内存的消耗,因为每实例化一次就会消耗一次内存。

单例模式连接MySQL

<?php
    
class Db {
    // static 全局化变量,永久保存,供全局使用
    private static $_instance;
    private static $_dbConnect;
    //保存数据库的配置信息
    private $_dbConfig = array(
        'host' => '127.0.0.1',
        'user' => 'cddata',
        'password' => 'cddata',
        'database' => 'cddata',
    );

    //使用private防止用户new
   private function __construct(){}

    //重写clone防止用户进行clone
   public function __clone(){
        //当用户clone操作时产生一个错误信息
        die("不能克隆".mysql_error());
    }    

    //由类的自身来进行实例化
   public static function getInstance(){
        if(!(self::$_instance instanceof self)){
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    public function connect(){
        self::$_dbConnect = @mysql_connect($this->_dbConfig['host'],
            $this->_dbConfig['user'],$this->_dbConfig['password']);

        if(!self::$_dbConnect){
            die("数据库连接出错".mysql_error());
        }
        // 设置编码
        mysql_query("SET NAMES UTF8");
        // 连接数据库
        mysql_select_db($this->_dbConfig['database'],self::$_dbConnect);
        return self::$_dbConnect;
    }
}

测试数据库连接

$res = Db::getInstance();
var_dump($res);