由於我以前是做java開發的,在使用單例模式的時候,首先想到的想用餓漢式,然後發現在PHP中,有這樣一個特性:因爲PHP不支持在類定義時給類的成員變量賦予非基本類型的值。如表達式,new操作等等。轉而想要確保這個單例模式的原子性,發現PHP中也沒有像JAVA中的線程安全問題。嘿嘿,你說PHP好不好?那麼OK接下來就試試PHP的懶漢式單例模式了。
一、三私一公:
①、私有靜態屬性,又來儲存生成的唯一對象
②、私有構造函數
③、私有克隆函數,防止克隆——clone
④、公共靜態方法,用來訪問靜態屬性儲存的對象,如果沒有對象,則生成此單例
二、關鍵詞instanceof
檢查此變量是否爲該類的對象、子類、或是實現接口。
1、一個private的__construct是必須的,單例類不能在其它類中實例化,只能被自身實例化;2、擁有一個保存類的實例的靜態成員變量;
3、一個靜態的公共方法用於實例化這個類,並訪問這個類的實例;
class SingleInstance{
private function _construct(){
}
private static $instance;
private function _clone(){
}
public static function getInstance(){
if(!self::$instance instanceof SingleInstance){
self::$instance=new SingleInstance();
}
return self ::$instance;
}
}