最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你搞懂PHP單例模式

 更新時間:2022年12月20日 15:52:38   作者:程序員-南  
單例就是單實(shí)例的意思,即在系統(tǒng)全局,一個類只創(chuàng)建一個對象,并且在系統(tǒng)全局都可以訪問這個對象而不用重新創(chuàng)建。本文將通過示例為大家詳細(xì)講解Java單例模式的使用,需要的可以參考一下

簡介

單例模式是創(chuàng)建型對象的一種,用于如何優(yōu)雅的創(chuàng)建對象。

讓一個類最多產(chǎn)生一個對象。

場景

只需要一個對象就能解決并且要使用多次的場景,比如框架的數(shù)據(jù)庫連接。

優(yōu)點(diǎn)

減少資源消耗,一個對象能完成的事情,就不需要再實(shí)例化出來同樣的東西。

缺點(diǎn)

對象生命周期都是頁面級的,每次頁面被執(zhí)行時,都會重新建立新的對象,都會在頁面執(zhí)行完畢后被清空,這樣似乎PHP單例模式意義不大。

示例代碼

class Demo {
    //聲明一個存儲對象的方法
    private static $obj;
    //防止當(dāng)前類的外部進(jìn)行實(shí)例化
    private function __construct() {}
    //防止當(dāng)前類的外部進(jìn)行克隆
    private function __clone() {}
    //聲明一獲取示例的方案
    public static function getInstance() {
        if(self::$obj === null) {
            self::$obj = new self();
        }
        return self::$obj;
    }
    public function otherFunction() {
        //todo ...
    }
}

測試代碼:

class Demo {
    //聲明一個存儲對象的方法
    private static $obj;
    //防止當(dāng)前類的外部進(jìn)行實(shí)例化
    private function __construct() {}
    //防止當(dāng)前類的外部進(jìn)行克隆
    private function __clone() {}
    //聲明一獲取示例的方案
    public static function getInstance() {
        if(self::$obj === null) {
        //在此處打印數(shù)據(jù)到文件,可清楚的看出來執(zhí)行了幾次。
        //靜態(tài)方法或者靜態(tài)屬性可以稱之為類變量或者類屬性,會隨著類的加載一并加載到內(nèi)存當(dāng)中。
            file_put_contents('F:/stdout.txt', 1,FILE_APPEND);
            self::$obj = new self();
        }
        return self::$obj;
    }
    public function otherFunction() {
        //todo ...
    }
}
//類的外部執(zhí)行了5次實(shí)例化操作
for($i = 0; $i < 5; $i++) {
    Demo::getInstance();
}

升級版本:

如果每一個類都寫一個單例模式的話,會顯得有重復(fù)的代碼,為此可以用繼承去解決這個問題。

此時self就需要修改為static,不然self是當(dāng)前對象而不是子類對象。

static::方法或?qū)傩裕@種使用稱為后期靜態(tài)綁定。

這和但是static 修飾成員屬性或者成員方法,一個是使用,一個是修飾。

class Singleton {
    //聲明一個存儲對象的方法
    private static $obj;
    //防止當(dāng)前類的外部進(jìn)行實(shí)例化
    private function __construct() {}
    //防止當(dāng)前類的外部進(jìn)行克隆
    private function __clone() {}
    //聲明一獲取示例的方案
    public static function getInstance() {
    	//檢測$obj是否為空并是否不屬于當(dāng)前類
        if(((static::$obj === null) && (! static::$obj instanceof static))) {
            static::$obj = new static();
        }
        return static::$obj;
    }
}
class Test extends Singleton {
    public function func() {
        return mt_rand(0, 10);
    }
}
//使用:
Test::getInstance()->func();

到此這篇關(guān)于一文帶你搞懂PHP單例模式的文章就介紹到這了,更多相關(guān)PHP單例模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用PHP寫的基于Memcache的Queue實(shí)現(xiàn)代碼

    用PHP寫的基于Memcache的Queue實(shí)現(xiàn)代碼

    用PHP寫的基于Memcache的Queue實(shí)現(xiàn)代碼,需要的朋友可以參考下。
    2011-11-11
  • php中session垃圾回收機(jī)制

    php中session垃圾回收機(jī)制

    雖然自己也是PHP的學(xué)習(xí)者,但之前還真沒怎么了解PHP內(nèi)部的垃圾回收流程,只是在我們的代碼中用了 unset,null,mysql_close,__destruct等等一些函數(shù)去釋放對象防止內(nèi)存溢出而已,所以上網(wǎng)GG下,找到了以下一些說明,
    2018-06-06
  • PHP 安全檢測代碼片段(分享)

    PHP 安全檢測代碼片段(分享)

    本篇文章是對PHP安全檢測代碼的片段進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • 使用PHPStorm+XDebug搭建單步調(diào)試環(huán)境

    使用PHPStorm+XDebug搭建單步調(diào)試環(huán)境

    由于 PhpStorm 不像 Zend 公司為 Zend Studio 那樣配套集成了很多開發(fā)部件,包括解釋器、調(diào)試器、虛擬機(jī)、服務(wù)器、開發(fā)框架等等。因此,配置 PhpStorm 開發(fā)環(huán)境相對較繁瑣,有很多需要注意的地方。
    2017-11-11
  • PHP composer更新指定依賴包過程詳細(xì)講解

    PHP composer更新指定依賴包過程詳細(xì)講解

    這篇文章主要介紹了php使用composer安裝擴(kuò)展包教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • PHP 程序員的調(diào)試技術(shù)小結(jié)

    PHP 程序員的調(diào)試技術(shù)小結(jié)

    大家都知道在開發(fā)過程中,代碼的調(diào)式非常重要,對于一些常見錯誤的調(diào)試技巧有助于提高代碼編寫的效率。
    2009-11-11
  • php簡單開啟gzip壓縮方法(zlib.output_compression)

    php簡單開啟gzip壓縮方法(zlib.output_compression)

    網(wǎng)上的教程基本是你抄我來我抄他,不外乎加頭加尾或者自構(gòu)函數(shù)兩種寫法。實(shí)際上每個php頁面都要去加代碼——當(dāng)然也可以include引用,不過總顯得略微麻煩
    2013-04-04
  • php 獲取今日、昨日、上周、本月的起始時間戳和結(jié)束時間戳的方法

    php 獲取今日、昨日、上周、本月的起始時間戳和結(jié)束時間戳的方法

    php 獲取今日、昨日、上周、本月的起始時間戳和結(jié)束時間戳的方法,主要使用到了 php 的時間函數(shù) mktime,下面首先還是直奔主題以示例說明如何使用 mktime 獲取今日、昨日、上周、本月的起始時間戳和結(jié)束時間戳,然后在介紹一下 mktime 函數(shù)作用和用法
    2013-09-09
  • Linux下源碼包安裝Swoole及基本使用操作圖文詳解

    Linux下源碼包安裝Swoole及基本使用操作圖文詳解

    這篇文章主要介紹了Linux下源碼包安裝Swoole及基本使用操作,結(jié)合圖文形式詳細(xì)分析了Linux環(huán)境下下載、安裝Swoole及基本使用相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-04-04
  • php遍歷樹的常用方法匯總

    php遍歷樹的常用方法匯總

    這篇文章主要介紹了php遍歷樹的常用方法,實(shí)例分析了php常用的三種遍歷樹的技巧,需要的朋友可以參考下
    2015-06-06

最新評論

安国市| 朝阳县| 沽源县| 如东县| 龙南县| 顺义区| 新泰市| 赞皇县| 花莲县| 合江县| 汉川市| 鄄城县| 二手房| 通渭县| 岚皋县| 禹城市| 东安县| 扶余县| 阳山县| 阳高县| 南宁市| 钟祥市| 贞丰县| 百色市| 随州市| 新泰市| 凤城市| 桐梓县| 屏山县| 盐源县| 沛县| 南充市| 澜沧| 绥江县| 郓城县| 什邡市| 临安市| 云霄县| 天台县| 菏泽市| 阳信县|