單例模式也就是只能實例化一次,也就代表在實例化時不可能使用new關鍵字,下面是使用示例,大家參考使用吧,以下為單例模式代碼:
- <?php
- class EasyFramework_Easy_Mysql{
- protected static $_instance = null;
- private function __construct(){
- }
- public static function getInstance(){
- if (self::$_instance === null){
- self::$_instance = new self();
- }
- return self::$_instance;
- }
- protected function __clone(){
- }
- //Vevb.com
- }
- $x = EasyFramework_Easy_Mysql::getInstance();
- var_dump($x);
- ?>
1.第一步:
既然是單例,也就是只能實例化一次,也就代表在實例化時,不可能使用new關鍵字?。。?!
在使用new關鍵字時,類中的構造函數將自動調用。
但是,如果我們將構造函數的訪問控制符設置為protected或private
那么就不可能直接使用new關鍵字了?。?!
第二步:
無論protected/private修飾的屬性或方法,請問在當前類的
內部是否可以訪問?---> 可以
第三步:
現在我們根本沒有辦法得到對象(因為你不能使用new關鍵字了),
第四步:靜態成員(包括屬性或方法)在訪問時,只能通過
類名稱::屬性()
類名稱::方法()
第五步:如果我現在存在一個靜態方法--> getInstance()
那么在調用時就應寫成
$object = EasyFramework_Easy_Mysql::getInstance()
如果,getInstance()方法可以得到唯一的一個對象
也就代表是所謂的單例模式了?。?!
第六步,怎么讓getInstace()只得到一個對象呢?
既然要得到對象,那么肯定是:
$variabl = new ????();
我們又知道靜態屬性的值是可以所有的對象來繼承的?。?!
靜態成員是屬于類的,而非對象的!
所以:
第七步:聲明一個靜態的屬性,用其存儲實例化的對象
protectd static $_instance
并且初始值為null
那么我在調用getInstance()方法時,只需要判斷其值是否為空即可/
- public static function getInstance(){
- if(self::_instance === null){
- self::_instance = new self();
- }
- return self::_instance;
- }
在實例時,一定是這樣寫:
$x = EasyFramework_Easy_Mysql::getInstance();
在第一時調用時,類的$_instance這個靜態屬性值為null,那么也就代表,getInstance()方法的判斷條件為真了,
也就意味著
self::$_instance這個成員有了值了!?。?/p>
并且還返回這個值
$y = EasyFramework_Easy_Mysql::getInstance();
在第二次或第N次調用時,self::$_instance已經有了值了
也就代表getInstance()方法的條件為假了?。?!
也就代表其中的程序代表不可能執行了?。?!
也就代表將直接返回以前的值了!?。?/p>
新聞熱點
疑難解答