php 單例模式詳細介紹及實現原始碼

2022-10-06 01:12:12 字數 1448 閱讀 6021

什麼是單例模式

單例模式顧名思義,就是只有乙個例項。

作為物件的建立模式, 單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項,這個類我們稱之為單例類。

單例模式的要點有三個:

一是某個類只能有乙個例項;

二是它必須自行建立這個例項;

三是它必須自行向整個系統提供這個例項。 

為什麼要使用php單例模式?

1、php的應用主要在於資料庫應用、所以乙個應用中會存在大量的資料庫操作、使用單例模式、則可以避免大量的new 操作消耗的資源

2、如果系統中需要有乙個類來全域性控制某些配置資訊、那麼使用單例模式可以很方便的實現. 這個可以參看zf的frontcontroller部分

3、在一次頁面請求中、便於進行除錯、因為所有的**(例如資料庫操作類db)都集中在乙個類中、我們可以在類中設定鉤子、輸出日誌、從而避免到處var_dump、echo

單例類1、建構函式需要標記為private(訪問控制:防止外部**使用new操作符建立物件)、單例類不能在其他類中例項化、只能被其自身kzuhmyh例項化

2、擁有乙個儲存類的例項的靜態成員變數

3、擁有乙個訪問這個例項的公共的靜態方法(常用getinstance()方法進行例項化單例類、通過instanceof操作符可以檢測到類是否已經被例項化)

4、另外、需要建立__clone()方法防止物件被複製(轉殖)

php單例模式實現方法

單例模式在特定的情況下可以節省資源的消耗,例如同一頁面對資料庫的多次操作,不需要去new多次從而節省了資源。

單例模式的關鍵在於php中的「ins程式設計客棧tanceof」,它用來檢測乙個變數是否是某個類的乙個例項。

同時,為了防止使用者去new例項,需要將「__construc程式設計客棧t」函式許可權設定為private。

為了防止使用者進行clone,也要重寫「__clone」方法。

<?php /*

* 單例資料庫連線

*/class db

//重寫clone防止使用者進行clone

public function __clone()

//由類的自身來進行例項化 (作者:碼農教程 )

public static function getinstance()

return self::$_instance;

} public function connect()

mysql_query("set names utf8");

mysql_select_db($this->_dbconfig['database'],self::$_dbconnect);

return self::$_dbconnect;

}}$a = db::getinstance();

try程式設計客棧catch(exception $e)

本文標題: php 單例模式詳細介紹及實現原始碼

本文位址:

php單例模式詳細介紹

1 單例模式的概念 單例模式是指整個應用中某個類只有乙個物件例項的設計模式。具體來說,作為物件的建立方式。單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統全域性的提供這個例項。它不會建立例項副本,而是會向單例類內部儲存的例項返回乙個引用。2 單例模式的特點 單例模式的主要特點是 三私一公...

PHP單例模式詳細介紹

單例模式的概念 單例模式是指整個應用中某個類只有乙個物件例項的設計模式。具體來說,作為物件的建立方式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統全域性的提供這個例項。它不會建立例項副本,而是會向單例類內部儲存的例項返回乙個引用。單例模式的特點 單例模式的主要特點是 三私一公 需要乙...

PHP實現單例模式

一.單例模式的特點 應用場景 在乙個應用中會存在大量連線資料庫的操作,如果不用單例模式,那每次都要new操作,但是每次new都會消耗大量的記憶體資源和系統資源,而且每次開啟和關閉資料庫連線都是對資料庫的一種極大考驗和浪費。二 要點 1.construct和 clone這兩個方法必須設為私有,防止外部...