溫馨提示×

溫馨提示×

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

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

php 模式設(shè)計之單例模式

發(fā)布時間:2020-08-09 00:05:05 來源:網(wǎng)絡(luò) 閱讀:209 作者:天祥的學(xué)習(xí) 欄目:web開發(fā)

單例模式是為了防止多次重復(fù)實例化,例如數(shù)據(jù)庫的重復(fù)連接,造成資源浪費。

重點是:

1/ 一個類只有一個對象
2/ 類為自行創(chuàng)建,不能通過new來聲明
3/ 用途:在整個系統(tǒng)中統(tǒng)一提供這一個對象。

寫法:

1/ 類中定義一個私有靜態(tài)變量
2/ 類中只提供私有的構(gòu)造函數(shù)
3/ 提供一個靜態(tài)公有函數(shù)用來創(chuàng)建私有對象本身。
4/ 使用__clone防止克隆

<?php

//學(xué)習(xí)使用單例模式

class Danli
{

    private static $db = null;
    private static $num = 0;

    private function __construct()
    {
        echo "對象已經(jīng)構(gòu)建完成:".self::$num."次\n";

    }

    public static function getInstance()
    {

        if(self::$db instanceof self){
            echo "已經(jīng)實例化,不要重復(fù)實例\n";
            return self::$db;
        }else{
            self::$num +=1;
            return  self::$db = new self();

        }

    }

    static function test()
    {
        echo "調(diào)用成功\n";
    }
    public function __clone()
    {
        echo "不能克隆哦";
    }
}

$d = Danli::getInstance();
$d->test();
$c = Danli::getInstance();
$c->test();

$d= clone $c;

//
向AI問一下細(xì)節(jié)

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

AI