單例模式的特點:
1、構造函數需要標記為private(訪問控制:防止外部代碼使用new操作符創建對象),單例類不能在其他類中實例化,只能被其自身實例化;
2、擁有一個保存類的實例的靜態成員變量
3、擁有一個訪問這個實例的公共的靜態方法(常用getInstance()方法進行實例化單例類,通過instanceof操作符可以檢測到類是否已經被實例化)
另外,需要創建__clone()方法防止對象被復制(克隆)
DEMO(鏈接數據庫):
代碼如下 復制代碼/* 例子:數據庫連接職責的集中控制 */
class Database {
private $_db;
static $_instance;
private function __construct() {
$this->_db = pg_connect('dbname=example_db');
}
private __clone() {};
public static function getInstance() {
if(! (self::$_instance instanceof self) )
{
self::$_instance = new self();
}
return self::$_instance;
}
public function query($sql) {
// 使用 $this->_db 執行一個查詢
return pg_query($this->_db, $sql);
}
}