首页 > 代码库 > single单例模式

single单例模式

单例模式:多用于数据库连接,保证数据库只连接一次,避免重复连接。因为多次打开服务器会造成服务器负担,运行速度会减慢。

 以下是一个连接数据库的单例模式:

 1 <?php
 2 class db_mysql{// 单例中包含三个私有属性(一个静态变量,一个构造函数,一个克隆方法),一个公共静态方法。三私一公
 3     private static $instance;// 用来存储数据库连接
 4     private $pdo;
 5     private function __construct(){// 私有构造函数,定义成private型,防止外部实例化对象
 6         //echo 11;
 7         $this->con("my_blog","root","123456");//连接数据库
 8     }
 9     private function __clone(){
10 //定义成私有的是防止对象被克隆,克隆是可以改变参数。如果$db4=$db;这是赋值操作,不能改变参数
11         echo 22;
12     }
13     private function con($dbname,$username,$password){//数据库连接,三种方式:mysql_connet   mysqli   pdo
14         try {
15             $this->pdo=new PDO("mysql:host=localhost;dbname=$dbname",$username,$password);// 创建pdo连接对象
16             echo "连接成功";
17         } catch (PDOException $ex) {
18             echo $ex->getMessage();
19         }
20     }
21     public static function getinstance(){
22         if(!(self::$instance instanceof self)){// self代表自身(本身是一个对象),判断$instance的值属不属于这个对象,
23             self::$instance=new self;// self代表  db_mysql
24         }
25         return self::$instance;
26     }
27     public function insert($data){// 添加功能
28         if(!is_array($data)){
29             return FALSE;
30         }
31         $fields=  array_keys($data);
32         $val=array_values($data);
33 //        var_dump($val);//数组
34         $str=array_walk($val,array($this,‘parsestr‘));// 通过循环方式,循环数组中的每一个值
35         //foreach($val as $k=>$v){$val[$k]=parsestr($v)};
36         //array_walk    相当于一个while循环,array($this,‘‘)是一个数组,parsestr是一个回调函数
37 //        echo "<pre>";
38 //        var_dump($val);//数组
39         $str=implode(",", $val);
40 //         echo "<br>";
41 //          echo "<pre>";
42 //        echo $str;
43         $fields=  implode(",", $fields);
44         $sql="insert into fruit ($fields) values ($str) ";
45         echo $sql;
46         echo "<br>";
47         $num=$this->pdo->exec($sql);
48         echo $num;
49         echo "<br>";
50         $id=  $this->pdo->lastInsertId();
51         echo $id;
52     }
53     public function getlist($fileds,$table,$condition){//$fileds  字段  $table表名   $condition 查询条件
54         if(!is_array($condition)){
55             return FALSE;
56         }
57         $where="1=1";
58         foreach ($condition as $key => $val){
59             $where .=" and $key =‘".$val."‘";
60         }
61         $sql="select ".$fileds." from ".$table." where ".$where;
62         $result=$this->pdo->query($sql);
63         if($result){//判断$result,是否有值
64            return  $result->fetchall(PDO::FETCH_ASSOC);            
65         }
66     }
67 
68     public function parsestr(&$val){//引用
69          $val= "‘".$val."‘";// $val[$k]=
70 //         echo "<pre>";
71 //         echo $val;//字符串
72     }
73     
74 }
75 //$b=new db_mysql();
76 $db=  db_mysql::getinstance();
77 echo "<br>";
78 //$db2=  db_mysql::getinstance();
79 echo "<br>";
80 //$db3= clone $db;//克隆
81 $db->insert([‘fruit_name‘=>‘葡萄‘,‘supplier_id‘=>2]);
82 echo "<br>";
83 $a=$db->getlist("*",‘fruit‘,array(‘fruit_name‘=>‘苹果‘));
84 echo "<br>";
85 echo "<pre>";
86 var_dump($a);

 连接数据库的方法中用:try{

}catch(){

}

捕获异常

1 13     private function con($dbname,$username,$password){//数据库连接,三种方式:mysql_connet   mysqli   pdo
2 14         try {
3 15             $this->pdo=new PDO("mysql:host=localhost;dbname=$dbname",$username,$password);// 创建pdo连接对象
4 16             echo "连接成功";
5 17         } catch (PDOException $ex) {
6 18             echo $ex->getMessage();
7 19         }
8 20     }

 

single单例模式