52)PHP,加了单例模式的数据库代码

时间:2021-10-29 10:03:12
 1 <?php
2 class db
3 {
4 public $host ;//= "localhost";//定义默认连接方式
5 public $User;//= "root";//定义默认用户名
6 public $Pwd;//= "root";//定义默认的密码
7 public $Dbname ;//= "thkphp5";//定义默认的数据库名
8 public $my_sql;
9 public $link;
10 public $result;
11 // protected static $_dbh = null; //静态属性,所有数据库实例共用,避免重复连接数据库,这个是学来的,看的别人的代码,觉得不错,摘过来的
12 /********************************************************************
13 ********************************************************************
14 ** 下面的这个就是单利模式所需要的代码 *******
15 *******************************************************************************/
16 public static function instance($config){
17 if(!isset($this->link){
18 $this->link=new self($config);
19 //这里还可以这样写:
20 //$this->link=$this->__construct($config);
21 //因为实例化对象就是调用一次类的__construct()函数。
22
23 }
24 return $this->link;
25
26 }
27 //下面的这个克隆函数变成私有的,这样就能在类的外面克隆了。
28 private function __clone(){}
29 /********************************************************************
30 ********************************************************************
31 ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *******
32 *******************************************************************************/
33 /*
34 * 构造函数
35 * 主机名,使用者,使用者密码,数据库的名字,查询语句
36 */
37 public function __construct($config) {
38 $this->host=$config['host'];
39 $this->User=$config['user'];
40 $this->Pwd=$config['pwd'];
41 $this->Dbname=$config['dbname'];
42 $this->my_sql=$config['sql'];
43 //这个也是摘过来的的(if)
44 //if ( is_null(self::$_dbh) ) {
45 $this->link= $this->_connect();
46 // }
47 $this->result= $this->Query($this->my_sql);
48
49 }
50
51 //成员方法 是用来执行sql语句的方法
52 /*
53 * 数据库查询函数
54 * $sql string 是你的查询语句
55 */
56 public function Query($sql)
57 //两个参数:sql语句,判断返回1查询或是增删改的返回
58 {
59 $db = $this->connect();
60 $r = $db->query($sql);
61 if (isset($r)) {
62 return $r->fetch_all();//查询语句,返回数组.执行sql的返回方式是all,也可以换成row
63 } else {
64 return "数据库查询失败!";
65 }
66
67
68 }
69 /*
70 * 数据库连接函数
71 */
72 public function connect(){
73 $Link= mysqli_connect($this->host,$this->User,$this->Pwd,$this->Dbname);
74           //$this->dbh=
75 return $Link;
76 }
77
78 }
79 //$sql='select * from zixun;';
80 //$config=include './BBB.php';
81 // $shujuku=new db($config);
82
83
84 // include './login.html';
85 //var_dump($shujuku->result);
86
87 ?>

注意在实例化具有了单例模式函数的类时,是这样实例化的:                         类名::instance($config);