单例模式连接数据库

时间:2022-09-22 00:10:32

单例模式的官方概念:单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。

通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。即一个类只有一个对象实例。

首先要理解两个概念:第一个是静态方法(属性),第二个是非静态方法(属性),

关键词是 static,使用static声明的变量和方法,只可以在本类中进行使用,而且不需要被实例化就可直接使用,

self:: 进行调用。静态属性和方法可以理解为在这个类中的全局变量和方法,可以在类中随时被调用。

事例代码

<?php
定义常量 define(
"DB_HOST", "127.0.0.1"); define("DB_USER", "root"); define("DB_PASSWORD", "root"); define("DB_DBNAME", "dml"); class db {
定义静态变量d,存储实例的对象
private static $d;
定义变量db存储数据库对象
protected $db;
protected $host; protected $user; protected $pwd; protected $dbname; private function __construct($host=DB_HOST,$user=DB_USER,$pwd=DB_PASSWORD,$dbname=DB_DBNAME) { $this->host=$host; $this->user=$user; $this->pwd=$pwd; $this->dbname=$dbname;
执行数据库连接的操作
if (!$this->db) { $this->conn(); } }
数据库连接的方法
private function conn() { $conn=new mysqli($this->host,$this->user,$this->pwd); if($conn->connect_error){ echo "数据库连接失败,错误信息:" . $conn->connect_error; }
连接数据库 $conn
->select_db($this->dbname);
设置字符集 $conn
->set_charset("utf8"); $this->db=$conn; } 禁止克隆 private function __clone() { }
实例化类操作
public static function getdb() {
判断变量d是否是这个类本身实例化的对象
if (!self::$d instanceof self) { self::$d = new self; } return self::$d; } 数据库增删改查操作 public function querydb($sql) { $res = $this->db->query($sql)->fetch_all(MYSQLI_ASSOC); return $res; } } 调用时,先调用实例化类的方法 $aa=db::getdb(); $res=$aa->querydb("SELECT * FROM `user`"); var_dump($res);