單例模式也就是只能實例化一次,也就代表在實例化時不可能使用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()方法的條件為假了!!! * 也就代表其中的程序代表不可能執行了!!! * 也就代表將直接返回以前的值了!!! * * * * */