PHP的單例模式

2021-08-07 19:45:38 字數 1427 閱讀 4003

單例模式:

單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。

單例模式是一種常見的設計模式,在計算機系統中,執行緒池,快取,日誌物件,對話方塊,印表機,資料庫操作,顯示卡的驅動常被設計成單例

單例模式分3種:懶漢式單例,餓漢式單例,登記式單例。

特點:1.只能有乙個例項

2.必須自行建立這個例項

3,必須給其他物件提供這一例項

場景:php乙個主要應用場景就是應用程式與資料庫打交道的場景,在乙個應用中會存在大量的資料庫操作,針對資料庫控制代碼連線資料庫的行為,適用單例模式可以避免大量的new操作。因為每一次new操作都會消耗系統和記憶體的資源。

在沒使用單例模式的情況下:

$db = new db();

//比如有個應用場景是新增一條使用者資訊

$db->adduserinfo();

//然而我們需要早另外乙個地方要使用這個使用者資訊,這時要用到資料庫控制代碼資源,可能會這麼做

function test()

一次請求要多次new操作,消耗大量資源

php單例模式

上面的物件圖中,有乙個「單例物件」,而「客戶甲」、「客戶乙」和「客戶丙」是單例物件的是那個客戶物件。可以看到客戶物件共享乙個單例物件。而從單例物件到自身的連線可以看出,單例物件是有對自己的引用。

例:

class user 

//私有轉殖函式,防止外辦轉殖物件

private function __clone()

//靜態方法,單例統一訪問入口

static public function getinstance()

return self::$_instance;

}public function getname()

public function setname($name)

}$a = user::getinstance();

$a->setname('jack ma');

$b = user::getinstance();

$b->setname('pony ma');

echo $a->getname();//輸出pony ma

echo $b->getname();//輸出pony ma

只會例項化乙個物件,物件$a和$b指向的是同乙個例項化的user物件,通俗地說$a和$b都指向同乙個記憶體位址。故而在$b物件在setname時,覆蓋了$a物件設定的jack ma,最終$name = 'pony ma'。

優點:省記憶體

缺點:1,難除錯

2,隱藏的依賴關係

3,無法用錯誤型別的資料複寫乙個單例

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...