溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

php中怎么使用單例模式

發(fā)布時(shí)間:2021-07-22 16:31:30 來(lái)源:億速云 閱讀:118 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

今天就跟大家聊聊有關(guān)php中怎么使用單例模式,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(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í),類(lèi)中的構(gòu)造函數(shù)將自動(dòng)調(diào)用。
 * 但是,如果我們將構(gòu)造函數(shù)的訪(fǎng)問(wèn)控制符設(shè)置為protected或private
 * 那么就不可能直接使用new關(guān)鍵字了?。?!
 * 第二步:
 * 無(wú)論protected/private修飾的屬性或方法,請(qǐng)問(wèn)在當(dāng)前類(lèi)的
 * 內(nèi)部是否可以訪(fǎng)問(wèn)?---> 可以
 * 第三步:
 * 現(xiàn)在我們根本沒(méi)有辦法得到對(duì)象(因?yàn)槟悴荒苁褂胣ew關(guān)鍵字了),
 * 第四步:靜態(tài)成員(包括屬性或方法)在訪(fǎng)問(wèn)時(shí),只能通過(guò)
 * 類(lèi)名稱(chēng)::屬性()
 * 類(lèi)名稱(chēng)::方法()
 * 第五步:如果我現(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)成員是屬于類(lè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í),類(lèi)的$_instance這個(gè)靜態(tài)屬性值為null,
 * 那么也就代表,getInstance()方法的判斷條件為真了,
 * 也就意味著
 * self::$_instance這個(gè)成員有了值了!??!
 * 并且還返回這個(gè)值
 * $y = EasyFramework_Easy_Mysql::getInstance();
 * 在第二次或第N次調(diào)用時(shí),self::$_instance已經(jīng)有了值了
 * 也就代表getInstance()方法的條件為假了?。?!
 * 也就代表其中的程序代表不可能執(zhí)行了!??!
 * 也就代表將直接返回以前的值了!??!
 *
 *
 *
 * */

看完上述內(nèi)容,你們對(duì)php中怎么使用單例模式有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI