您好,登錄后才能下訂單哦!
PHP中單例模式的使用場景有哪些?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
單例模式按字面來看就是指某一個類只存在一個實(shí)例,這一點(diǎn)其實(shí)是與靜態(tài)方法是相同的,只存在一個實(shí)例的好處是當(dāng)我們需要使用某個類時只需要實(shí)例化一次,不需要每次都去new,極大的降低了資源的耗費(fèi),比如說數(shù)據(jù)庫的連接類。
一個類只有一個對象實(shí)例含義
作為對象的創(chuàng)建模式,單例模式確保某一個類只有一個實(shí)例,而且自行實(shí)例化并向整個系統(tǒng)全局地提供這個實(shí)例。它不會創(chuàng)建實(shí)例副本,而是會向單例類內(nèi)部存儲的實(shí)例返回一個引用。
那么單例模式與靜態(tài)方法有什么區(qū)別呢?
個人觀點(diǎn),如果不存在比較復(fù)雜的事務(wù)管理,用singleton會比較好,原因有三:
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òu)造函數(shù),并且必須被標(biāo)記為private。
2、擁有一個保存類的實(shí)例的靜態(tài)成員變量。
3、擁有一個訪問這個實(shí)例的公共的靜態(tài)方法。
單例模式確保某個類只有一個實(shí)例,而且自行實(shí)例化并向整個系統(tǒng)提供這個實(shí)例。
單例模式是一種常見的設(shè)計(jì)模式,在計(jì)算機(jī)系統(tǒng)中,線程池、緩存、日志對象、對話框、打印機(jī)、數(shù)據(jù)庫操作、顯卡的驅(qū)動程序常被設(shè)計(jì)成單例。
單例模式分3種:懶漢式單例、餓漢式單例、登記式單例。
單例模式有以下3個特點(diǎn):
1.只能有一個實(shí)例。
2.必須自行創(chuàng)建這個實(shí)例。
3.必須給其他對象提供這一實(shí)例。
那么為什么要使用PHP單例模式?
PHP一個主要應(yīng)用場合就是應(yīng)用程序與數(shù)據(jù)庫打交道的場景,在一個應(yīng)用中會存在大量的數(shù)據(jù)庫操作,針對數(shù)據(jù)庫句柄連接數(shù)據(jù)庫的行為,使用單例模式可以避免大量的new操作。因?yàn)槊恳淮蝞ew操作都會消耗系統(tǒng)和內(nèi)存的資源。
具體使用例子:
<?php /** * by www.jb51.net */ class Mysql{ //該屬性用來保存實(shí)例 private static $instance; private $conn; //構(gòu)造函數(shù)為private,防止創(chuàng)建對象 private function __construct(){ $this->conn = mysql_connect('localhost','root','123456'); //... } //創(chuàng)建一個用來實(shí)例化對象的方法 public static function getInstance(){ if(!(self::$instance instanceof self)){ self::$instance = new self; } return self::$instance; } //防止對象被復(fù)制 public function __clone(){ trigger_error('Clone is not allowed !'); } //... public function query(){ //do something } } //使用單例調(diào)用類中的方法,不能new 和 clone Mysql::getInstance()->query(); ?>
php,一個嵌套的縮寫名稱,是英文超級文本預(yù)處理語言(PHP:Hypertext Preprocessor)的縮寫。PHP 是一種 HTML 內(nèi)嵌式的語言,PHP與微軟的ASP頗有幾分相似,都是一種在服務(wù)器端執(zhí)行的嵌入HTML文檔的腳本語言,語言的風(fēng)格有類似于C語言,現(xiàn)在被很多的網(wǎng)站編程人員廣泛的運(yùn)用。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。