亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP設(shè)計(jì)模式之單例模式定義與用法分析

 更新時(shí)間:2019年03月26日 09:18:15   作者:12345987  
這篇文章主要介紹了PHP設(shè)計(jì)模式之單例模式定義與用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了單例模式的概念、特點(diǎn)、優(yōu)缺點(diǎn),并結(jié)合php實(shí)例形式分析了單例模式的定義與使用方法,需要的朋友可以參考下

本文實(shí)例分析了PHP設(shè)計(jì)模式之單例模式。分享給大家供大家參考,具體如下:

單例模式(Singleton Pattern 單件模式或單元素模式),是常見的一種設(shè)計(jì)模式,它有三個(gè)特點(diǎn)

  • 1.只能有一個(gè)實(shí)例
  • 2.必須自行創(chuàng)建這個(gè)實(shí)例
  • 3.必須給其他對(duì)象提供這一實(shí)例

下面用PHP代碼實(shí)現(xiàn)一下

<?PHP
/**
 * Created by PHPStorm.
 * User: tiansi
 * Date: 18/1/2
 * Time: 下午3:40
 */
class Signleton{
  private static $_instanse = null;
  //私有化構(gòu)造方法 防止外界使用new實(shí)例化對(duì)象
  private function __construct()
  {
  }
  //私有化克隆方法 防止外界克隆對(duì)象
  private function __clone()
  {
    // TODO: Implement __clone() method.
  }
  //靜態(tài)化 提供單例訪問(wèn)入口
  static function getInstance(){
    if (is_null(self::$_instanse) || !isset(self::$_instanse)){
      self::$_instanse = new self();
    }
    return self::$_instanse;
  }
  public function say(){
    echo 'I am signleton';
  }
}

下面試一下調(diào)用

<?PHP
/**
 * Created by PHPStorm.
 * User: tiansi
 * Date: 18/1/2
 * Time: 下午3:48
 */
//第一種方式會(huì)報(bào)錯(cuò) 因?yàn)榘褬?gòu)造方法私有化了
//PHP Fatal error: Uncaught Error: Call to private Signleton::__construct() from invalid context in /Users/apple/uxin/SignletonController.PHP:11
/*
$signleton1 = new Signleton();
$signleton1->say();
*/
//上述代碼報(bào)錯(cuò):Fatal error: Call to private Signleton::__construct() 
//實(shí)例化成功 輸出I am signleton
$signleton2 = Signleton::getInstance();
$signleton2->say();

運(yùn)行結(jié)果:

I am signleton

它的優(yōu)缺點(diǎn)

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

  • 1.在單例模式中,活動(dòng)的單例只有一個(gè)實(shí)例,對(duì)單例類的所有實(shí)例化得到的都是相同的一個(gè)實(shí)例。這樣就 防止其它對(duì)象對(duì)自己的實(shí)例化,確保所有的對(duì)象都訪問(wèn)一個(gè)實(shí)例
  • 2.單例模式具有一定的伸縮性,類自己來(lái)控制實(shí)例化進(jìn)程,類就在改變實(shí)例化進(jìn)程上有相應(yīng)的伸縮性。
  • 3.提供了對(duì)唯一實(shí)例的受控訪問(wèn)。
  • 4.由于在系統(tǒng)內(nèi)存中只存在一個(gè)對(duì)象,因此可以 節(jié)約系統(tǒng)資源,當(dāng) 需要頻繁創(chuàng)建和銷毀的對(duì)象時(shí)單例模式無(wú)疑可以提高系統(tǒng)的性能。
  • 5.允許可變數(shù)目的實(shí)例。
  • 6.避免對(duì)共享資源的多重占用。

缺點(diǎn):

  • 1.不適用于變化的對(duì)象,如果同一類型的對(duì)象總是要在不同的用例場(chǎng)景發(fā)生變化,單例就會(huì)引起數(shù)據(jù)的錯(cuò)誤,不能保存彼此的狀態(tài)。
  • 2.由于單利模式中沒(méi)有抽象層,因此單例類的擴(kuò)展有很大的困難。
  • 3.單例類的職責(zé)過(guò)重,在一定程度上違背了“單一職責(zé)原則”。
  • 4.濫用單例將帶來(lái)一些負(fù)面問(wèn)題,如為了節(jié)省資源將數(shù)據(jù)庫(kù)連接池對(duì)象設(shè)計(jì)為的單例類,可能會(huì)導(dǎo)致共享連接池對(duì)象的程序過(guò)多而出現(xiàn)連接池溢出;如果實(shí)例化的對(duì)象長(zhǎng)時(shí)間不被利用,系統(tǒng)會(huì)認(rèn)為是垃圾而被回收,這將導(dǎo)致對(duì)象狀態(tài)的丟失。

這是單例模式的優(yōu)缺點(diǎn),因?yàn)檎Z(yǔ)言類型的不同,PHP的單例模式又不一樣

眾所周知,PHP語(yǔ)言是一種解釋型的腳本語(yǔ)言,這種運(yùn)行機(jī)制使得每個(gè)PHP頁(yè)面被解釋執(zhí)行后,所有的相關(guān)資源都會(huì)被回收。也就是說(shuō),PHP在語(yǔ)言級(jí)別上沒(méi)有辦法讓某個(gè)對(duì)象常駐內(nèi)存,這和asp.net、Java等編譯型是不同的,比如在Java中單例會(huì)一直存在于整個(gè)應(yīng)用程序的生命周期里,變量是跨頁(yè)面級(jí)的,真正可以做到這個(gè)實(shí)例在應(yīng)用程序生命周期中的唯一性。然而在PHP中,所有的變量無(wú)論是全局變量還是類的靜態(tài)成員,都是頁(yè)面級(jí)的,每次頁(yè)面被執(zhí)行時(shí),都會(huì)重新建立新的對(duì)象,都會(huì)在頁(yè)面執(zhí)行完畢后被清空,這樣似乎PHP單例模式就沒(méi)有什么意義了,所以PHP單例模式我覺(jué)得只是針對(duì)單次頁(yè)面級(jí)請(qǐng)求時(shí)出現(xiàn)多個(gè)應(yīng)用場(chǎng)景并需要共享同一對(duì)象資源時(shí)才有用

比如

1.應(yīng)用程序與數(shù)據(jù)庫(kù)交互

一個(gè)應(yīng)用中會(huì)存在大量的數(shù)據(jù)庫(kù)操作,比如過(guò)數(shù)據(jù)庫(kù)句柄來(lái)連接數(shù)據(jù)庫(kù)這一行為,使用單例模式可以避免大量的new操作,因?yàn)槊恳淮蝞ew操作都會(huì)消耗內(nèi)存資源和系統(tǒng)資源。

2.控制配置信息

如果系統(tǒng)中需要有一個(gè)類來(lái)全局控制某些配置信息, 那么使用單例模式可以很方便的實(shí)現(xiàn)

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 啟用OPCache提高PHP程序性能的方法

    啟用OPCache提高PHP程序性能的方法

    今天小編就為大家分享一篇關(guān)于啟用OPCache提高PHP程序性能的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • PHP中l(wèi)trim與rtrim去除左右空格及特殊字符實(shí)例

    PHP中l(wèi)trim與rtrim去除左右空格及特殊字符實(shí)例

    這篇文章主要介紹了PHP中l(wèi)trim與rtrim去除左右空格及特殊字符的用法,結(jié)合實(shí)例形式較為詳細(xì)的說(shuō)明了ltrim與rtrim的定義,參數(shù)作用及去除左右空格與特殊字符的使用技巧,需要的朋友可以參考下
    2016-01-01
  • php在項(xiàng)目中尋找代碼的壞味道(綜藝命名)

    php在項(xiàng)目中尋找代碼的壞味道(綜藝命名)

    今天想給綜藝頻道添加一些內(nèi)容,但是綜藝這個(gè)詞太難伺候了(主要是我的英文不是太好)。我把整個(gè)命名過(guò)程摘錄如下
    2012-07-07
  • Zend Studio for Eclipse的java.lang.NullPointerException錯(cuò)誤的解決方法

    Zend Studio for Eclipse的java.lang.NullPointerException錯(cuò)誤的解決方

    Zend Studio for Eclipse 6.x 可以算得上是最好的PHP的IDE了.
    2008-12-12
  • PHP設(shè)計(jì)模式之適配器模式定義與用法詳解

    PHP設(shè)計(jì)模式之適配器模式定義與用法詳解

    這篇文章主要介紹了PHP設(shè)計(jì)模式之適配器模式,結(jié)合實(shí)例形式較為詳細(xì)的分析了php適配器模式的概念、原理、定義、用法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-04-04
  • 解析如何用php screw加密php源代碼

    解析如何用php screw加密php源代碼

    本篇文章是對(duì)用php_screw加密php源代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php將數(shù)據(jù)庫(kù)導(dǎo)出成excel的方法

    php將數(shù)據(jù)庫(kù)導(dǎo)出成excel的方法

    有時(shí)寫程序時(shí)后臺(tái)要求把大量數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)中,比如考試成績(jī)、電話簿等一般都是存放在excel中的數(shù)據(jù),這時(shí)我們可把excel導(dǎo)出成csv文件,然后通過(guò)以下程序即可批量導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫(kù)中
    2010-05-05
  • php實(shí)現(xiàn)的日歷程序

    php實(shí)現(xiàn)的日歷程序

    這篇文章主要介紹了php實(shí)現(xiàn)的日歷程序,可實(shí)現(xiàn)基本的日歷顯示與實(shí)時(shí)查詢功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-06-06
  • PHP設(shè)計(jì)模式之抽象工廠模式實(shí)例分析

    PHP設(shè)計(jì)模式之抽象工廠模式實(shí)例分析

    這篇文章主要介紹了PHP設(shè)計(jì)模式之抽象工廠模式,結(jié)合實(shí)例形式分析了php抽象工廠模式的概念、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-03-03
  • php實(shí)現(xiàn)簡(jiǎn)單文件下載的方法

    php實(shí)現(xiàn)簡(jiǎn)單文件下載的方法

    這篇文章主要介紹了php實(shí)現(xiàn)簡(jiǎn)單文件下載的方法,以實(shí)例形式簡(jiǎn)單分析了文件下載的原理與實(shí)現(xiàn)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-01-01

最新評(píng)論