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     }
时间: 2024-12-23 05:48:25

single单例模式的相关文章

单例模式简单理解

单例模式 一般来说,一个类可以创建多个不同的对象,但是对于单例模式而言.这个单例类虽然也能创建"多个"对象,但是本质上来讲,这个对象其实就是一个. 单例模式的特点是:这个类只有一个对象,且这个对象是自己创建的,这个系统都要使用这个唯一的对象. 比如说,系统中的回收站,不管是哪个应用使用,都是一个回收站. 代码具体如下: public class MyDanLi { //1.私有化构造函数,在外面不能New来创建 private MyDanLi() { } //2.创建私有的静态的类的单

二、单例模式之单例模式

单例模式创建方式有以下几种方式: 饿汉模式 懒汉模式 注册式模式 枚举式模式 序列化模式 1.饿汉模式 在类加载时初始化,也是利用类加载线程安全的特性确保了单例实例化的线程安全. package com.kancy.pattern.single; /** * 单例模式 - 饿汉模式 * @author kancy */ public class HungerSingleton { /** * 在类加载时初始化好单例对象,利用类加载来保证单例初始化的线程安全 * 优点:不用任何锁就能保证绝对线程安

WCF分布式开发步步为赢(15):错误契约(FaultContract)与异常处理(ExceptionHandle)

今天学习WCF分布式开发步步为赢系列的15节:错误契约(FaultContract)与异常处理(ExceptionHandle).本节内容作为WCF分布式开发的一个重要知识点,无论在学习还是项目中都应该有所了解.此前也和多位学习爱好者讨论过WCF异常处理的相关知识.这里就系统整理一下,共大家参考.同时也是对<WCF分布式开发步步为赢>系列文章的完善和补充.   本节主要涉及的知识点就是:[1].NET异常处理[2]WCF异常处理[3]错误契约[4]WCF异常处理扩展[5]示例代码分析,最后是[

java程序性能优化之设计优化---单例pk

对于单例,很多人就要问了.为什么要使用单例,单例意义何在? 单例的产生是由于类的频繁使用,每次生成对象都要new,使用完值后GC要释放对象.这样一来系统性能降低,GC承受着巨大的压力.为了能够提升系统性能或其他,以及减轻GC压力.我们引进了单例模式. 首先我们来看三个经典的单例模式 import java.util.Map; import java.util.HashMap; class Single1 { static Single1 single = null; private Single

Scala笔记整理(四):Scala面向对象—类详解2(继承相关)

[TOC] 单例 希望某个类只存在一个使用的对象,而不管有多少个调用者在使用它,就是单例的概念. Java中的单例 package cn.xpleaf.single; /** * 单例模式-饿汉式(在属性中先创建好对象,不管是否调用getInstance方法) * @author yeyonghao * */ public class User { private static User user = new User(); private User(){} //外界调用不到构造函数 publi

第1章 单例模式(Single Pattern)

原文 第1章 单例模式(Single Pattern) 单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点. 一.常用模式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class Singleton {         private static Singleton instance;           private Singleton()         

c# 单例模式(Single)

public class Singleton { private static Singleton _instance; private static readonly object syn = new object(); private Singleton() //构造函数设置private,不能被new,单例模式 { } public static Singleton CreateInstance() { if (_instance == null) { lock (syn) //加锁防止多

java/android 设计模式学习笔记(一)---单例模式

前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使用的时候也会有一些坑. PS:对技术感兴趣的同鞋加群544645972一起交流 设计模式总目录 java/android 设计模式学习笔记目录 特点 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的使用很广泛,比如:线程池(threadpool).缓存(cache).对

单例模式

概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能