首先明確一下單例模式:如果希望在系統中某個類的物件只能存在乙個,那麼單例模式是最好的解決方案。
接下來讓我們提煉出單例模式的幾個關鍵點:假如有乙個單例類,叫做 singleton,那麼:
1 singletonobj 物件應該可以被系統中的任何物件使用
2 singletonobj 物件不應該被儲存在會被覆寫的全域性變數中
3 系統中不應超過乙個singletonobj物件,也就是說 a物件可以設定singletonobj物件的乙個屬性,
而b物件不需要通過其他任何物件就可以直接獲得該屬性的值。
為了解決這個問題,那麼我們就從問題本身入手,也就是如何控制乙個類被例項化,
讓該類的例項化只能例項化一次,這個聽起來似乎真的有些難,但是實際上很簡單,只需要定義乙個私有的構造方法即可:
1<?php2/*
*3* created by phpstorm.
4* user: evolution
5* date: 14-12-7
6* time: 下午2:407*/
8class
singleton
1819
//返回單一例項
20public
static
function
getinstance ()
2829
return self::$instance;30
}3132//
設定屬性
33public
function setproperty ( $key, $value
) 36
37//
獲取屬性
38public
function getpeoperty ( $key
) 4142}
4344
45$singleobj = singleton::getinstance();
46$singleobj->setproperty('root_path','/www');
47$singleobj->setproperty('tmp_path','/tmp');
4849
//接下來刪除該單例物件,如果還能獲取到剛剛新增的屬性,說明使用的是同乙個物件
50unset($singleobj
);51
52$singleobj = singleton::getinstance();
53echo
$singleobj->getpeoperty('root_path');
54echo
$singleobj->getpeoperty('tmp_path');
單例模式資料庫處理類(只涉及到簡單的原理)
1/**';2* 單例模式3*/
4class
db//
防止在外部例項化該類
7private
function __clone(){}//
禁止通過複製的方式例項化該類
8public
static
function connect()
12public
static
function select($table)
19return
$result_arr;//
結果集以陣列的形式返回20}
21}22$result = db::select("article");
23echo '';
24print_r($result
);25
echo '
PHP設計模式之單例模式
1 單例模式概念 單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。2 uml靜態模型 3 單...
PHP設計模式之 單例模式
class danli 建立 clone方法防止物件被複製轉殖 public function clone 單例方法,用於訪問例項的公共的靜態方法 public static function getinstance return self instance public function test...
PHP設計模式之 單例模式
單例模式 職責模式 簡單的說,乙個物件 在學習設計模式之前,需要比較了解物件導向思想 只負責乙個特定的任務 單例類 1 建構函式需要標記為 private 訪問控制 防止外部 使用 new操作符建立物件 單例類不能在其他類中例項化,只能被其自身例項化 2 擁有乙個儲存類的例項的靜態成員變數 3 擁有...