據說,單例模式是設計模式中最簡單的一種。
不多說,先上代碼,然后解說,一共兩個文件:
danli.class <?php class Danli { //保存類的實例的靜態成員變量 static private $_instance=null; //私有的構造方法 private function __construct(){ echo "這是一個構造方法<br>"; } //用於訪問類的實例的公共的靜態方法 static public function getInstance(){ if(!(self::$_instance instanceof Danli)){ echo "實例化<br>"; self::$_instance = new self; } return self::$_instance; } //類的其它方法 public function test(){ echo "調用成功<br>"; } }
index.php <?php //加載類文件 require "Danli.php"; //第一次調用類的實例 $first = Danli::getInstance(); $first->test(); //第二次調用類的實例 $second = Danli::getInstance(); $second->test();
輸出結果:
實例化
這是一個構造方法
調用成功
調用成功
以上是PHP單例模式的簡單實現,通過結果可以看到Danli類只實例化了一次。
接下來說一下單例模式。
簡單點兒說,單例模式就是讓類的一個對象成為系統中的唯一實例,避免大量的 new 操作消耗的資源,也方便設置鈎子輸出日志信息等。
關於單例模式在網上可以收到很多很詳細的解說,這里不再復述,咱們還是詳細說一下PHP的單例模式的實現。
從上面的代碼可以看出來,PHP的單例模式實現要求:
1、一個private的__construct是必須的,單例類不能在其它類中實例化,只能被自身實例化;
2、擁有一個保存類的實例的靜態成員變量;
3、一個靜態的公共方法用於實例化這個類,並訪問這個類的實例;