1. 程式人生 > >PHP單例模式--典型的三私一公

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;