濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > PHP中單例模式的使用場景與使用方法講解

PHP中單例模式的使用場景與使用方法講解

熱門標(biāo)簽:阿里云400電話申請(qǐng)加工單 西區(qū)企業(yè)怎么做地圖標(biāo)注入駐 九江外呼系統(tǒng) 地下城堡2圖九地圖標(biāo)注 七魚外呼系統(tǒng)停用嗎 智能電話機(jī)器人排名前十名南京 抖音有個(gè)地圖標(biāo)注是什么意思 保定crm外呼系統(tǒng)運(yùn)營商 海南人工外呼系統(tǒng)有效果嗎

單例模式按字面來看就是指某一個(gè)類只存在一個(gè)實(shí)例,這一點(diǎn)其實(shí)是與靜態(tài)方法是相同的,只存在一個(gè)實(shí)例的好處是當(dāng)我們需要使用某個(gè)類時(shí)只需要實(shí)例化一次,不需要每次都去new,極大的降低了資源的耗費(fèi),比如說數(shù)據(jù)庫的連接類。

一個(gè)類只有一個(gè)對(duì)象實(shí)例含義  

作為對(duì)象的創(chuàng)建模式,單例模式確保某一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)全局地提供這個(gè)實(shí)例。它不會(huì)創(chuàng)建實(shí)例副本,而是會(huì)向單例類內(nèi)部存儲(chǔ)的實(shí)例返回一個(gè)引用。

那么單例模式與靜態(tài)方法有什么區(qū)別呢?

個(gè)人觀點(diǎn),如果不存在比較復(fù)雜的事務(wù)管理,用singleton會(huì)比較好,原因有三:

  • 1、單例可以繼承類,實(shí)現(xiàn)接口,而靜態(tài)類不能(可以集成類,但不能集成實(shí)例成員);
  • 2、單例可以被延遲初始化,靜態(tài)類一般在第一次加載是初始化;
  • 3、單例模式在使用中比靜態(tài)方法更靈活;

雖然這樣說,但到底該選用單例還是靜態(tài),我們還需要視實(shí)際情況而定,在設(shè)計(jì)模式中我們應(yīng)該做到的是:減少代碼,增加穩(wěn)定,方便理解,提升性能,減少開銷。

扯遠(yuǎn)了,下面我們說回PHP中單例模式的使用。

單例類至少擁有以下三種公共元素:

  • 1、必須擁有一個(gè)構(gòu)造函數(shù),并且必須被標(biāo)記為private。
  • 2、擁有一個(gè)保存類的實(shí)例的靜態(tài)成員變量。
  • 3、擁有一個(gè)訪問這個(gè)實(shí)例的公共的靜態(tài)方法。

單例模式確保某個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。

單例模式是一種常見的設(shè)計(jì)模式,在計(jì)算機(jī)系統(tǒng)中,線程池、緩存、日志對(duì)象、對(duì)話框、打印機(jī)、數(shù)據(jù)庫操作、顯卡的驅(qū)動(dòng)程序常被設(shè)計(jì)成單例。

單例模式分3種:懶漢式單例、餓漢式單例、登記式單例。

單例模式有以下3個(gè)特點(diǎn):

1.只能有一個(gè)實(shí)例。

2.必須自行創(chuàng)建這個(gè)實(shí)例。

3.必須給其他對(duì)象提供這一實(shí)例。

那么為什么要使用PHP單例模式?

PHP一個(gè)主要應(yīng)用場合就是應(yīng)用程序與數(shù)據(jù)庫打交道的場景,在一個(gè)應(yīng)用中會(huì)存在大量的數(shù)據(jù)庫操作,針對(duì)數(shù)據(jù)庫句柄連接數(shù)據(jù)庫的行為,使用單例模式可以避免大量的new操作。因?yàn)槊恳淮蝞ew操作都會(huì)消耗系統(tǒng)和內(nèi)存的資源。

具體使用例子:

?php
/**
 * by www.jb51.net
 */
class Mysql{
 //該屬性用來保存實(shí)例
 private static $instance;
 private $conn;
 //構(gòu)造函數(shù)為private,防止創(chuàng)建對(duì)象
 private function __construct(){
 $this->conn = mysql_connect('localhost','root','123456');
 //...
 }
 //創(chuàng)建一個(gè)用來實(shí)例化對(duì)象的方法
 public static function getInstance(){
 if(!(self::$instance instanceof self)){
  self::$instance = new self;
 }
 return self::$instance;
 }
 //防止對(duì)象被復(fù)制
 public function __clone(){
 trigger_error('Clone is not allowed !');
 }
 //...
 public function query(){
 //do something
 }
}
//使用單例調(diào)用類中的方法,不能new 和 clone
Mysql::getInstance()->query();
?>

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

您可能感興趣的文章:
  • PHP實(shí)現(xiàn)單例模式建立數(shù)據(jù)庫連接的方法分析
  • PHP中用Trait封裝單例模式的實(shí)現(xiàn)
  • PHP中常用的三種設(shè)計(jì)模式詳解【單例模式、工廠模式、觀察者模式】
  • php Redis函數(shù)用法實(shí)例總結(jié)【附php連接redis單例類】
  • php的單例模式及應(yīng)用場景詳解

標(biāo)簽:十堰 九江 甘肅 遼陽 涼山 韶關(guān) 梅河口 昭通

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP中單例模式的使用場景與使用方法講解》,本文關(guān)鍵詞  PHP,中單例,模式,的,使用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP中單例模式的使用場景與使用方法講解》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP中單例模式的使用場景與使用方法講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    阿拉善右旗| 陵水| 阿尔山市| 政和县| 简阳市| 汉阴县| 民丰县| 贡嘎县| 宁陵县| 洞头县| 当阳市| 洛隆县| 清河县| 莲花县| 南宁市| 赣州市| 长寿区| 安宁市| 景宁| 沁水县| 鹤岗市| 赤峰市| 阜新| 河津市| 怀安县| 清水河县| 安溪县| 大城县| 关岭| 青河县| 柘城县| 集贤县| 望谟县| 平顶山市| 济宁市| 伊川县| 体育| 平遥县| 霍林郭勒市| 屯昌县| 土默特右旗|