本文實例講述了PHP實現單例模式建立數據庫連接的方法。分享給大家供大家參考,具體如下:
理解php單例模式
一、什么是單例
wiki百科:單例模式,也叫單子模式,是一種常用的軟件設計模式。 在應用這個模式時,單例對象的類必須保證只有一個實例存在。 許多時候整個系統只需要擁有一個的全局對象,這樣有利于我們協調系統整體的行為。
二、為什么用單例
實際項目中像數據庫查詢,日志輸出,全局回調,統一校驗等模塊。這些模塊功能單一,但需要多次訪問,如果能夠全局唯一,多次復用會大大提升性能。這也就是單例存在的必要性。
三、單例模式的好處
1:減少頻繁創建,節省了cpu。
2:靜態對象公用,節省了內存。
3:功能解耦,代碼已維護。
四、如何設計單例
通過上面的描述,單例的核心是,實例一次生成,全局唯一,多次調用。因此在單例模式必須包含三要素:
1:私有化構造函數,私有化clone。也就是不能new,不能clone。【唯一】
2:擁有一個靜態變量,用于保存當前的類。【唯一如何保存】
3:提供一個公共的訪問入口。【可以訪問】
五、建立數據庫連接
PS:功能上不太完整,以后再補充**__**
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/** * 單例模式連接數據庫--面向對象 * */ //final關鍵字阻止此類被繼承 final class sql2 { static $instance ; static $connect ; protected $result ; //protected關鍵字阻止此類在外部進行實例化 protected function __construct( $host , $user , $password ) { self:: $connect = @ new mysqli( $host , $user , $password ); if (self:: $connect ->connect_errno) { die (iconv( 'gbk' , 'utf-8' , self:: $connect ->connect_error) . '(' . self:: $connect ->connect_errno . ')' ); } } //protected關鍵字阻止此類在外部進行克隆 protected function __clone() { } //當對象被銷毀時關閉連接 function __destruct() { self:: $connect ->close(); } //獲取實例 static function getInstance( $host , $user , $password ) { self:: $instance = self:: $instance ?: new self( $host , $user , $password ); return self:: $instance ; } //選擇數據庫 function set_db( $db ) { if (!self:: $connect ->select_db( $db )) { die (iconv( 'gbk' , 'utf-8' , self:: $connect ->error) . '(' . self:: $connect ->errno . ')' ); } } //執行SQL語句 function query( $query ) { if (!( $re = self:: $connect ->query( $query ))) { die (iconv( 'gbk' , 'utf-8' , self:: $connect ->error) . '(' . self:: $connect ->errno . ')' ); } $this ->result = $re ; return $re ; } //以數組形式返回查詢結果 function fetch_arr( $query ) { $re = $this ->query( $query ); $res = []; while ( $row = $re ->fetch_assoc()) { $res [] = $row ; } return $res ; } //獲取記錄數 function get_row() { return $this ->result->num_rows; } } $ins = sql2::getInstance( '127.0.0.1' , 'root' , 'root' ); $ins ->set_db( 'houtai' ); $re = $ins ->fetch_arr( 'select * from user ' ); //var_dump($re); $ins ->get_row(); |
希望本文所述對大家PHP程序設計有所幫助。
原文鏈接:https://blog.csdn.net/coco1118/article/details/101347908