PHP設(shè)計(jì)模式之單例模式原理與實(shí)現(xiàn)方法分析
本文實(shí)例講述了PHP設(shè)計(jì)模式之單例模式原理與實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
一、什么是單例模式
作為對象的創(chuàng)建模式,單例模式確保某一個(gè)類只有一個(gè)實(shí)例,并且對外提供這個(gè)全局實(shí)例的訪問入口。它不會創(chuàng)建實(shí)例副本,而是會向單例類內(nèi)部存儲的實(shí)例返回一個(gè)引用。
二、PHP單例模式三要素
1. 需要一個(gè)保存類的唯一實(shí)例的靜態(tài)成員變量。
2. 構(gòu)造函數(shù)和克隆函數(shù)必須聲明為私有的,防止外部程序創(chuàng)建或復(fù)制實(shí)例副本。
3. 必須提供一個(gè)訪問這個(gè)實(shí)例的公共靜態(tài)方法,從而返回唯一實(shí)例的一個(gè)引用。
三、為什么使用單例模式
使用單例模式的好處很大,以數(shù)據(jù)庫操作為例。若不采用單例模式,當(dāng)程序中出現(xiàn)大量數(shù)據(jù)庫操作時(shí),每次都要執(zhí)行new操作,每次都會消耗大量的內(nèi)存資源和系統(tǒng)資源,而且每次打開和關(guān)閉數(shù)據(jù)庫連接都是對數(shù)據(jù)庫的一種極大考驗(yàn)和浪費(fèi)。使用了單例模式,只需要實(shí)例化一次,不需要每次都執(zhí)行new操作,極大降低了資源的耗費(fèi)。
四、單例模式示例
這里以數(shù)據(jù)庫操作為例
<?php /** * 單例模式 **/ class Db { //保存全局實(shí)例 private static $instance; //數(shù)據(jù)庫連接句柄 private $db; //數(shù)據(jù)庫連接參數(shù) const HOSTNAME = "127.0.0.1"; const USERNAME = "root"; const PASSWORD = "root"; const DBNAME = "testdb"; //私有化構(gòu)造函數(shù),防止外界實(shí)例化對象 private function __construct() { $this->db = mysqli_connect(self::HOSTNAME,self::USERNAME, self::PASSWORD,self::DBNAME); } //私有化克隆函數(shù),防止外界克隆對象 private function __clone() { } //單例訪問統(tǒng)一入口 public static function getInstance() { if(!(self::$instance instanceof self)) { self::$instance = new self(); } return self::$instance; } //數(shù)據(jù)庫查詢操作 public function getinfo() { $sql = "select * from testtb"; $res = mysqli_query($this->db,$sql); while($row = mysqli_fetch_array($res)) { echo $row['testcol'] . '<br />'; } mysqli_free_result($res); } } $mysqli = Db::getInstance(); $mysqli->getinfo(); ?>
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
淺析PHP頁面局部刷新功能的實(shí)現(xiàn)小結(jié)
本篇文章是對PHP頁面局部刷新功能的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php連接與操作PostgreSQL數(shù)據(jù)庫的方法
這篇文章主要介紹了php連接與操作PostgreSQL數(shù)據(jù)庫的方法,以實(shí)例形式較為詳細(xì)的分析了php連接PostgreSQL數(shù)據(jù)庫以及進(jìn)行讀取與增加、修改、刪除等技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12針對PHP開發(fā)安全問題的相關(guān)總結(jié)
今天小編就為大家分享一篇關(guān)于針對PHP開發(fā)安全問題的相關(guān)總結(jié),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03原生PHP實(shí)現(xiàn)導(dǎo)出csv格式Excel文件的方法示例【附源碼下載】
這篇文章主要介紹了原生PHP實(shí)現(xiàn)導(dǎo)出csv格式Excel文件的方法,結(jié)合實(shí)例形式分析了基于原生php實(shí)現(xiàn)的Excel文件操作類進(jìn)行Excel文件的導(dǎo)出操作相關(guān)實(shí)現(xiàn)技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2019-03-03php創(chuàng)建類并調(diào)用的實(shí)例方法
在本篇文章里小編給大家分享的是關(guān)于php如何創(chuàng)建類并調(diào)用的相關(guān)知識點(diǎn),有需要的朋友們可以學(xué)習(xí)下。2019-09-09用PHP將網(wǎng)址字符串轉(zhuǎn)換成超鏈接(網(wǎng)址或email)
該函數(shù)將 URL 和 E-mail 地址字符串轉(zhuǎn)換為可點(diǎn)擊的超級鏈接。2010-05-05