PHP單例模式 三私一公

2021-10-06 14:04:06 字數 2229 閱讀 1944

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

單例模式的主要特點是「三私一公」:

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單例模式之「三私一公」

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