1.定義
單例模式確保某一個類只有一個實例,而且自行實例化並向整個系統全局地提供這個實例。它不會創建實例副本,而是會向單例類內部存儲的實例返回一個引用。
2.解決的問題/使用場景
在數據庫應用方面,使用單例模式,可以避免大量的new操作消耗的資源。
如果在系統中需要一個類來全局控制某些配置信息,那麼使用單例模式可以很方便的實現。
3.實現單例模式的要點
需要一個保存類的唯一實例的靜態成員變量。
構造函數和克隆函數必須聲明為私有的,防止外部程序new類從而失去單例模式的意義。
需要提供一個訪問這個實例的靜態方法(一般為getInstance方法),返回實例的引用。
4.實現代碼示例
<?php
class Singleton
{
private static $instance;
private $conn;
private function __construct()
{
$this->conn = mysql_connect(...);
}
private function __clone()
{
}
public static function GetInstance()
{
if (!(self::$instance instanceof self))
{
slef::$instance = new self();
}
return self::$instance;
}
public function GetDbConnect()
{
return $this->conn;
}
public function selectData($sql)
{
// $result mysql_query($sql,$this->conn);
// while mysql_fetch_array($result)....
}
}
$db = Singleton::GetInstance();
$db->selectData("select * from user");