如何保證一個類只有一個實(shí)例并且這個實(shí)例易于被訪問呢?定義一個html' target='_blank'>全局變量可以確保對象隨時都可以被訪問,但不能防止我們實(shí)例化多個對象。一個更好的解決辦法是讓類自身負(fù)責(zé)保存它的唯一實(shí)例。這個類可以保證沒有其他實(shí)例被創(chuàng)建,并且它可以提供一個訪問該實(shí)例的方法。這就是單例模式的模式動機(jī)。
例如我們在php的開發(fā)過程中我們創(chuàng)建了一個db類(數(shù)據(jù)庫操作類),那么我們希望再一個php文件中一個數(shù)據(jù)庫只被連接一次而一個php文件中也只需要一個數(shù)據(jù)庫對象!因?yàn)槎啻芜B接數(shù)據(jù)庫會大大降低php的執(zhí)行效率。也會帶來極大的系統(tǒng)開銷!
使用單例模式來封裝你的數(shù)據(jù)庫吧
?phpclass db//使用一個靜態(tài)變量記錄db對象初始化時為nullpublic static $db = null;/* 私有構(gòu)造函數(shù)是類無法完成外部的調(diào)用* 意味著您將無法使用 $xx = new db();private function __construct(){echo 連接數(shù)據(jù)庫.... * 使用靜態(tài)方法去獲取數(shù)據(jù)對象* 獲取時先判斷db對象是否已經(jīng)存在,如果存在則直接返回db對象反正則創(chuàng)建這個對象public static function getInstance(){if(self::$db == null){self::$db = new db();return self::$db;public function query($sql){echo 執(zhí)行sql命令 public function __destruct(){echo 關(guān)閉數(shù)據(jù)庫連接.... $db = db::getInstance();$db1 = db::getInstance();$db- query( test $db2 = db::getInstance();//輸出 : 連接數(shù)據(jù)庫....執(zhí)行sql命令關(guān)閉數(shù)據(jù)庫連接....
//可以看到不論我們獲取多少次db對象,雖然他們名稱不同,但都代表著同一個對象!這樣就實(shí)現(xiàn)單例模式!
以上就是什么是單例模式?的詳細(xì)內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選