單例模式是指整個應用中某個類只有乙個物件例項的設計模式。具體來說,作為物件的建立方式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統全域性的提供這個例項。它不會建立例項副本,而是會向單例類內部儲存的例項返回乙個引用。
單例模式的主要特點是「三私一公」:
1、需要乙個儲存類的唯一例項的私有靜態成員變數
2、建構函式必須宣告為私有的,防止外部程式new乙個物件從而失去單例的意義
3、轉殖函式必須宣告為私有的,防止物件被轉殖
4、必須提供乙個訪問這個例項的公共靜態方法(通常命名為getinstance),從而返回唯一例項的乙個引用。
在php的大多數應用中都會存在大量的資料庫操作,如果不用單例模式,那每次都要new操作,但是每次new都會消耗大量的系統資源和記憶體資源,而且每次開啟和關閉資料庫都是對資料庫的一種極大考驗和浪費。所以單例模式經常用在資料庫操作類中。
同樣,如果系統中需要有乙個類來全域性控制某些配置資訊,那使用單例模式可以很方便的實現。
php設計模式之一,單例模式,顧名思義就是只有乙個例項。單例模式確保某乙個類只有乙個例項,不能重複例項,只能它自己例項化,而且向整個系統提供這個例項。
三私一公:私有化靜態屬性,私有化構造方法,私有化轉殖方法,公有化靜態方法。
單例模式:即乙個類只被例項化一次,當其他人對其再次例項化時,返回第一次例項化的物件,可以避免大量的new操作,減少資源的消耗,典型應用於資料庫類的例項化。
class mysql
private function __clone()
public static function getinstance()
return self::$instance;
}}$obj1 = mysql::getinstance();
$obj2 = mysql::getinstance();
echo $obj1===$obj2?1:0; // 1
class db
private function __clone()
public static function getinstance()
return self::$instance;
}}$obj1 = db::getinstance();
$obj2 = db::getinstance();
echo $obj1===$obj2?1:0; // 1
class singleton
private function __clone()
public static function getinstance()
return self::$instance;
}public function set($name)}
$obj1 = singleton::getinstance();
$obj2 = singleton::getinstance();
$obj1->set("aaa");
$obj2->set("bbb");
echo $obj1->name; // 輸出結果:bbb
echo $obj2->name; // 輸出結果:bbb
// 原因:單例模式只new一次,開闢一塊空間,所以後續的例項都是操作的同一塊空間
// 引用easyswoole裡的單例實現
// 首先,他們的區別只有在繼承中才能體現出來,如果沒有任何繼承,那麼這兩者是沒有區別的。
// 然後,new self()返回的例項是萬年不變的,無論誰去呼叫,都返回同乙個類的例項,而new static()則是由呼叫者決定的
// new self()和new static()的區別
// ...$args 可變數量的引數
echo $obj1->name; // 輸出結果 www.sosemseo.com
echo $obj2->name; // 輸出結果 www.sosemseo.com
PHP單例模式 三私一公
注意 1.外部不可以例項化,因此內部例項化函式的型別必須為靜態,在類未例項化之前就已經初始化 2.靜態函式只能訪問靜態變數,所以定義private static instance 3.靜態變數的訪問寫法為 類名 變數名,在類內部可以直接寫self instance 4.可以用instanceof這個...
PHP單例模式 三私一公
php設計模式之一,單例模式,顧名思義就是只有乙個例項。單例模式確保某乙個類只有乙個例項,不能重複例項,只能它自己例項化,而且向整個系統提供這個例項。三私一公 私有化靜態屬性,私有化構造方法,私有化轉殖方法,公有化靜態方法。單例模式 即乙個類只被例項化一次,當其他人對其再次例項化時,返回第一次例項化...
php單例模式之「三私一公」
單例模式的概念 單例模式是指整個應用中某個類只有乙個物件例項的設計模式。具體來說,作為物件的建立方式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統全域性的提供這個例項。它不會建立例項副本,而是會向單例類內部儲存的例項返回乙個引用。單例模式的特點 單例模式的主要特點是 三私一公 需要乙...