單例模式的意義在於,很多時候不需要建立重複的例項。
用php實現單例模式的原理是,使用乙個靜態變數儲存例項,當遇到重複的「new」操作時,直接返回靜態變數中儲存的例項。
典型的應用有資料庫類,請看**:
class db{
//儲存例項的靜態變數
public static $instance;
//構造方法私有化 不能直接例項化
private function __construct(){
//資料庫連線**
//獲取例項
public static function getinstance(){
//如果例項已經存在 直接返回
if(self::$instance){
return self::$instance;
self::$instance = new self();
return self::$instance;
//示例方法
public function query(){
echo 'hello,world!';
這樣就用單例模式實現了乙個資料庫類,使用下面的**可以檢測:
$db = db::getinstance();
//輸出hello world! 說明獲取例項成功
$db->query();
$db2 = db::getinstance();
//證明它們是同乙個例項
echo $db === $db2;
我們使用了db::getinstance()來獲取例項,因為構造方法被設定成私有,不能直接用new db()來建立例項。
理由是,只要使用new會重複建立例項。而是用getinstance()會將第一次建立的例項存放在靜態變數裡,重複利用。
不管使用多少次getinstance()方法,在同乙個頁面中始終只有乙個例項存在,這就是我們想要的結果~
php手冊中說,如果兩個物件有相同的屬性和方法,那麼下面的語句成立:
$db1 == $db2;
如果兩個物件是同乙個,那麼下面的語句成立:
$db1 === $db2;
PHP單例模式
模式對於oop開發人員尤其有用,因為他有助於建立穩定的api,並且仍然保持一定的靈活度。一種模式可以幫助我們定義負責完成特定任務的物件,還可以允許我們全部修改掉某個類而不用修改與這些類打交道的 前者被稱為類的職責,後者被稱為類的多型性。單例模式被當作職責模式,他用來在應用程式中建立乙個單一的功能訪問...
php單例模式
單例模式 單例類 1 建構函式需要標記為private 訪問控制 防止外部 使用new操作符建立物件 單例類不能在其他類中例項化,只能被其自身例項化 2 擁有乙個儲存類的例項的靜態成員變數 3 擁有乙個訪問這個例項的公共的靜態方法 常用getinstance 方法進行例項化單例類,通過instanc...
php 單例模式
單例模式 身份證號碼 單例類identitycardno 身份證號碼類 class identitycardno public function getinstance else return self instance private function setidentitycardno no p...