PHP單例模式--典型的三私一公


單例模式:即一個類只被實例化一次,當其他人對其再次實例化時,便返回第一次實例化的對象。這種模式可以極大地節約資源。典型應用於數據庫類的實例化。
以實例化一個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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM