單例模式:
單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。
單例模式是一種常見的設計模式,在計算機系統中,執行緒池,快取,日誌物件,對話方塊,印表機,資料庫操作,顯示卡的驅動常被設計成單例
單例模式分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...