標籤:turn 產生 實現 log func class 其他 資料 nbsp
單例模式:即一個類只被執行個體化一次,當其他人對其再次執行個體化時,便返回第一次執行個體化的對象。這種模式可以極大地節約資源。典型應用於資料庫類的執行個體化。以執行個體化一個Mysql資料庫類為例:要實現一個類只執行個體化一次,就必須堵住其他執行個體化的入口。1.執行個體化類時,會自動調用類的構造方法,因為將構造方法設定為private屬性,限制為只能在類內部執行個體化 private function __construct(){ }2.定義一個靜態方法,在類內部執行個體化對象。執行個體化前先判斷該類是否已被執行個體化了,若已被執行個體化,就返回該執行個體化對象;若沒被執行個體化,便執行個體化一個對象並將該對象儲存在類的靜態屬性中 private static $self = null; public static function create(){ if (self::$self === null) { self::$self = new self(); } return self::$self; }3.禁止複製,對象之間進行複製可產生不同的對象。而複製時會自動調用類的__conle方法,因此將複製方法設定為private屬性 private function __clone(){ }綜上,三私一公(三個私人屬性和一個公用方法)單例模式的代碼如下:class Mysql { private static $self = null; public static function create(){ if (self::$self === null) { self::$self = new self(); } return self::$self; } private function __construct(){ } private function __clone(){ }}$a = Mysql::create();$b = Mysql::create();/*判斷兩個類是否為同一個類*/echo $a===$b ? 1 : 0;
PHP單例模式的三私一公