萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php設計模式之單例模式使用示例

php設計模式之單例模式使用示例

 單例模式也就是只能實例化一次,也就代表在實例化時不可能使用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(){       }   }   $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這個成員有了值了!!!  * 並且還返回這個值  * $y = EasyFramework_Easy_Mysql::getInstance();  * 在第二次或第N次調用時,self::$_instance已經有了值了  * 也就代表getInstance()方法的條件為假了!!!  * 也就代表其中的程序代表不可能執行了!!!  * 也就代表將直接返回以前的值了!!!  *  *  *  * */
copyright © 萬盛學電腦網 all rights reserved