php单例连接数据库

mysql_connect() 后续的php就不支持了,所以会报错。

现在改为使用mysqli_connect(),需要开启php扩展哟!

<?php
/**

* 设计模式之单例模式

* $_instance必须声明为静态的私有变量

* 构造函数和析构函数必须声明为私有,防止外部程序new

* 类从而失去单例模式的意义

* getInstance()方法必须设置为公有的,必须调用此方法

* 以返回实例的一个引用

* ::操作符只能访问静态变量和静态函数

* new对象都会消耗内存

* 使用场景:最常用的地方是数据库连接。

* 使用单例模式生成一个对象后,

* 该对象可以被其它众多对象所使用。

*/

class Danli{
  //保存类实例的静态成员变量
  private static $_instance = null;
  private $conn;
  //private标记的构造方法
  private function __construct(){
    //$conn = new mysqli('localhost', 'root', '123', 'php37');
    $this->conn = mysqli_connect('localhost', 'root', '123', 'php37');
    if (mysqli_connect_errno()) {
       printf("Connect failed: %s\n", mysqli_connect_error());
       exit();
    }
  }

  //单例方法,用于访问实例的公共的静态方法
  public static function getInstance(){
      if(!self::$_instance instanceof self){
          self::$_instance = new self;
       }
      return self::$_instance;
   }
   //创建__clone方法防止对象被复制克隆
   private function __clone(){ }
   // 防止析构函数被调用
   // private function __destruct(){ }
}
   //用new实例化private标记构造函数的类会报错
   //$danli = new Danli();
   //正确方法,用双冒号::操作符访问静态方法获取实例
   $danli=Danli::getInstance();
   var_dump($danli);
   //$danli->test();
   //复制(克隆)对象将导致一个E_USER_ERROR
   //$danli_clone=clone $danli;

原文地址:https://www.cnblogs.com/sxiangyues/p/6529943.html