單例模式的官方概念:單例模式,是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。
通過單例模式可以保證系統中,應用該模式的一個類只有一個實例。即一個類只有一個對象實例。
首先要理解兩個概念:第一個是靜態方法(屬性),第二個是非靜態方法(屬性),
關鍵詞是 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);