1. 程式人生 > >php設計單例模式,一次只能產生一個物件

php設計單例模式,一次只能產生一個物件

單例即單個物件,一次只能生產一個物件,程式碼如下

class Single{  // 定義一個類

 static private $instance=null; // 宣告一個靜態屬性,因為靜態屬性的資料具有長期性 且僅能為類所呼叫 所以這個靜態屬性用來儲存物件。
//同時 為了防止在程式碼外面直接通過Single::$instance 賦值改變單例的屬性 使其能產生多個物件,所以要對這個靜態屬性進行private化 不能在任何地方訪問

  private function __construct(){  // 私有化構造方法,使之不能$obj=new single()這種傳統的生產物件方式來生產物件,只能通過下面的靜態方法使用類名呼叫生產物件的方式來建立物件。
  }

  static function getObject(){ // 宣告一個函式 並且進行靜態化 使之只能用類名呼叫 

    if(self::$instance==null){ // 如果不存在物件 
      $obj=new self();        //則生產出一個物件,self是指當前類 自己
      self::$instance = $obj; // 將生產出的物件賦值給靜態屬性,使之儲存起來以待下次使用
      return $obj;        //返回物件
    }else{ //否則
      return self::$instance;  // 靜態屬性$instance不為空則是已經存在物件,則可以直接返回,因為裡面有物件
    }

  }
}

// 使用下面的建立物件語法能發現,所有建立的物件都是同一個物件。
$o1=Single::getObject();
$o2=Single::getObject();
$o3=Single::getObject();
var_dump($o1);
var_dump($o2);
var_dump($o3);

程式碼可以直接copy執行