單例模式
單例模式可以保證系統中一個類只有一個實例而且該實例易於外界訪問,從而方便對實例個數的控制並節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案,例如數據庫資源,就可以使用單例來獲得數據庫資源
簡而言之,單例就是:一個類有且僅有一個實例,並且自行實例化向整個系統提供
單例模式需要滿足的條件:
- 單例模式的類的構造方法必須是私有的,防止外部實力化
- 類中含有一個靜態屬性指向本類的唯一實例化
- 類中含有一個靜態方法創建或者獲取本類的靜態屬性
滿足以上3點,即是單例模式,這裏我有一個mysqli連接的單例小例子,供參考:
<?php
/**
* 數據庫單例類(針對mysqli實現)
*/
class DB{
private static $_instance; //單例對象引用
private static $_resource; //數據庫資源
private $db_config = array( //數據庫配置
'db_host' => 'localhost', //數據庫地址
'db_user' => 'root', //用戶名
'db_pwd' => 'sanyue', //密碼
'db_name' => 'marchsoftv3' //數據庫名
) ;
//私有構造方法,防止實例化
private function __construct(){}
//類方法獲取實例引用
public static function get_instance()
{
//判斷是否存在唯一實例,若不存在則實例化
if(!(self::$_instance instanceof self))
{
self::$_instance = new self();
}
//返回唯一實例的引用
return self::$_instance;
}
//連接數據庫
public function connect()
{
if(!self::$_resource)
{
//實例化mysqli連接數據庫
self::$_resource = new mysqli($this->db_config['db_host'],$this->db_config['db_user'],$this->db_config['db_pwd'],$this->db_config['db_name']);
if(!self::$_resource)
{
die('mysqli connect error'.mysqli_connect_error());
}
self::$_resource->query('set names utf8');
}
//返回數據庫資源
return self::$_resource;
}
}
?>