php設(shè)計(jì)模式之單例模式使用示例
以下為單例模式代碼:
<?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.第一步:
* 既然是單例,也就是只能實(shí)例化一次,也就代表在實(shí)例化時(shí)
* 不可能使用new關(guān)鍵字?。。?!
* 在使用new關(guān)鍵字時(shí),類中的構(gòu)造函數(shù)將自動(dòng)調(diào)用。
* 但是,如果我們將構(gòu)造函數(shù)的訪問(wèn)控制符設(shè)置為protected或private
* 那么就不可能直接使用new關(guān)鍵字了?。。?BR> * 第二步:
* 無(wú)論protected/private修飾的屬性或方法,請(qǐng)問(wèn)在當(dāng)前類的
* 內(nèi)部是否可以訪問(wèn)?---> 可以
* 第三步:
* 現(xiàn)在我們根本沒(méi)有辦法得到對(duì)象(因?yàn)槟悴荒苁褂胣ew關(guān)鍵字了),
* 第四步:靜態(tài)成員(包括屬性或方法)在訪問(wèn)時(shí),只能通過(guò)
* 類名稱::屬性()
* 類名稱::方法()
* 第五步:如果我現(xiàn)在存在一個(gè)靜態(tài)方法--> getInstance()
* 那么在調(diào)用時(shí)就應(yīng)寫(xiě)成
* $object = EasyFramework_Easy_Mysql::getInstance()
* 如果,getInstance()方法可以得到唯一的一個(gè)對(duì)象
* 也就代表是所謂的單例模式了?。?!
* 第六步,怎么讓getInstace()只得到一個(gè)對(duì)象呢?
* 既然要得到對(duì)象,那么肯定是:
* $variabl = new ????();
* 我們又知道靜態(tài)屬性的值是可以所有的對(duì)象來(lái)繼承的?。?!
* 靜態(tài)成員是屬于類的,而非對(duì)象的!
* 所以:
* 第七步:聲明一個(gè)靜態(tài)的屬性,用其存儲(chǔ)實(shí)例化的對(duì)象
* protectd static $_instance
*
* 并且初始值為null
* 那么我在調(diào)用getInstance()方法時(shí),只需要判斷其值是否為空即可\
*
* public static function getInstance(){
* if(self::_instance === null){
* self::_instance = new self();
* }
* return self::_instance;
* }
* 在實(shí)例時(shí),一定是這樣寫(xiě):
* $x = EasyFramework_Easy_Mysql::getInstance();
* 在第一時(shí)調(diào)用時(shí),類的$_instance這個(gè)靜態(tài)屬性值為null,
* 那么也就代表,getInstance()方法的判斷條件為真了,
* 也就意味著
* self::$_instance這個(gè)成員有了值了?。?!
* 并且還返回這個(gè)值
* $y = EasyFramework_Easy_Mysql::getInstance();
* 在第二次或第N次調(diào)用時(shí),self::$_instance已經(jīng)有了值了
* 也就代表getInstance()方法的條件為假了!?。?BR> * 也就代表其中的程序代表不可能執(zhí)行了?。?!
* 也就代表將直接返回以前的值了?。?!
*
*
*
* */
相關(guān)文章
ThinkPHP框架整合微信支付之Native 掃碼支付模式二圖文詳解
這篇文章主要介紹了ThinkPHP框架整合微信支付之Native 掃碼支付模式,結(jié)合圖文形式詳細(xì)分析了thinkPHP整合微信掃碼支付功能的具體步驟與相關(guān)操作技巧,以及與模式一的區(qū)別,需要的朋友可以參考下2019-04-04php之XML轉(zhuǎn)數(shù)組函數(shù)的詳解
本篇文章是對(duì)php中的XML轉(zhuǎn)數(shù)組函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP循環(huán)遍歷數(shù)組的3種方法list()、each()和while總結(jié)
這篇文章主要介紹了PHP循環(huán)遍歷數(shù)組的3種方法list()、each()和while總結(jié),本文重點(diǎn)在于對(duì)這3種方法的混合使用講解上,需要的朋友可以參考下2014-11-11php結(jié)合ajax實(shí)現(xiàn)手機(jī)發(fā)紅包的案例
發(fā)紅包功能,當(dāng)我們輸入紅包數(shù)量和總金額后,PHP會(huì)根據(jù)這兩個(gè)值進(jìn)行隨機(jī)分配每個(gè)金額,保證每個(gè)人都能領(lǐng)取到一個(gè)紅包,每個(gè)紅包金額不等,就是要求紅包金額要有差異,所有紅包金額總額應(yīng)該等于總金額。2016-10-10微信支付開(kāi)發(fā)發(fā)貨通知實(shí)例
本篇文章主要介紹微信支付中發(fā)貨通知功能的實(shí)現(xiàn),并且提供實(shí)例代碼做參考,希望能幫到開(kāi)發(fā)微信支付的小伙伴2016-07-07linux系統(tǒng)下php安裝mbstring擴(kuò)展的二種方法
這篇文章主要介紹了linux系統(tǒng)環(huán)境下,php安裝mbstring擴(kuò)展的二種方法,大家參考使用吧2014-01-01php compact 通過(guò)變量創(chuàng)建數(shù)組
php compact函數(shù)用于創(chuàng)建數(shù)組,該函數(shù)創(chuàng)建數(shù)組比較特殊,compact函數(shù)參數(shù)將接受一個(gè)或多個(gè)變量,然后將變量的名稱作為該創(chuàng)建數(shù)組的索引,變量值作為該創(chuàng)建數(shù)組的值,然后返回創(chuàng)建完成的數(shù)組。本文章向大家講解compact函數(shù)的基本語(yǔ)法及使用實(shí)例。需要的碼農(nóng)可以參考一下。2016-11-11