single单例模式
单例模式:多用于数据库连接,保证数据库只连接一次,避免重复连接。因为多次打开服务器会造成服务器负担,运行速度会减慢。
以下是一个连接数据库的单例模式:
<?php
class db_mysql{// 单例中包含三个私有属性(一个静态变量,一个构造函数,一个克隆方法),一个公共静态方法。三私一公
private static $instance;// 用来存储数据库连接
private $pdo;
private function __construct(){// 私有构造函数,定义成private型,防止外部实例化对象
//echo 11;
$this->con("my_blog","root","123456");//连接数据库
}
private function __clone(){
//定义成私有的是防止对象被克隆,克隆是可以改变参数。如果$db4=$db;这是赋值操作,不能改变参数
echo 22;
}
private function con($dbname,$username,$password){//数据库连接,三种方式:mysql_connet mysqli pdo
try {
$this->pdo=new PDO("mysql:host=localhost;dbname=$dbname",$username,$password);// 创建pdo连接对象
echo "连接成功";
} catch (PDOException $ex) {
echo $ex->getMessage();
}
}
public static function getinstance(){
if(!(self::$instance instanceof self)){// self代表自身(本身是一个对象),判断$instance的值属不属于这个对象,
self::$instance=new self;// self代表 db_mysql
}
return self::$instance;
}
public function insert($data){// 添加功能
if(!is_array($data)){
return FALSE;
}
$fields= array_keys($data);
$val=array_values($data);
// var_dump($val);//数组
$str=array_walk($val,array($this,'parsestr'));// 通过循环方式,循环数组中的每一个值
//foreach($val as $k=>$v){$val[$k]=parsestr($v)};
//array_walk 相当于一个while循环,array($this,'')是一个数组,parsestr是一个回调函数
// echo "<pre>";
// var_dump($val);//数组
$str=implode(",", $val);
// echo "<br>";
// echo "<pre>";
// echo $str;
$fields= implode(",", $fields);
$sql="insert into fruit ($fields) values ($str) ";
echo $sql;
echo "<br>";
$num=$this->pdo->exec($sql);
echo $num;
echo "<br>";
$id= $this->pdo->lastInsertId();
echo $id;
}
public function getlist($fileds,$table,$condition){//$fileds 字段 $table表名 $condition 查询条件
if(!is_array($condition)){
return FALSE;
}
$where="1=1";
foreach ($condition as $key => $val){
$where .=" and $key ='".$val."'";
}
$sql="select ".$fileds." from ".$table." where ".$where;
$result=$this->pdo->query($sql);
if($result){//判断$result,是否有值
return $result->fetchall(PDO::FETCH_ASSOC);
}
} public function parsestr(&$val){//引用
$val= "'".$val."'";// $val[$k]=
// echo "<pre>";
// echo $val;//字符串
} }
//$b=new db_mysql();
$db= db_mysql::getinstance();
echo "<br>";
//$db2= db_mysql::getinstance();
echo "<br>";
//$db3= clone $db;//克隆
$db->insert(['fruit_name'=>'葡萄','supplier_id'=>2]);
echo "<br>";
$a=$db->getlist("*",'fruit',array('fruit_name'=>'苹果'));
echo "<br>";
echo "<pre>";
var_dump($a);
连接数据库的方法中用:try{
}catch(){
}
捕获异常
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 }
single单例模式的更多相关文章
- 7.JAVA基础复习——JAVA中的设计模式单例模式
设计模式:是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 总体来说设计模式分为23种三大类: 创建型模式,共 ...
- java基础学习之单例设计模式学习
最近狂补java基础的我重新学习了下单例,下面直接贴出代码,以作备忘 package com.darling.single; /** * 单例模式 * 单例即在内存中只存在该类的一个实例,要想实现这个 ...
- WCF分布式开发步步为赢(15):错误契约(FaultContract)与异常处理(ExceptionHandle)
今天学习WCF分布式开发步步为赢系列的15节:错误契约(FaultContract)与异常处理(ExceptionHandle).本节内容作为WCF分布式开发的一个重要知识点,无论在学习还是项目中都应 ...
- wcf必知必会以及与Webapi的区别
快速阅读 介绍wcf中的信息交换模式MEP以及数据在传输过程中的序列化,endpont的介绍和wcf的三种实例模式以及安全模式 以及和Webapi的简单对比. wcf介绍 支持跨平台. 支持多种协议 ...
- 第1章 单例模式(Single Pattern)
原文 第1章 单例模式(Single Pattern) 单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点. 一.常用模式: 1 ...
- 创建型模式篇(单例模式Single Pattern)
一.单例模式(Singleton Pattern) 单例模式要求一个类只能有一个实例,并且提供了一个全局的访问点. 比如说,中国主席的职位是Singleton,法律规定主席选举,任何时间只能有一个主席 ...
- Single Pattern(单例模式)
单例模式是一种常用的软件设计模式.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的实例只能存在一个,单例模式是最好的 ...
- c# 单例模式(Single);单例模式的5种写法
单例模式(Singleton Pattern): 在平时的开发中,可能会用到单例模式,许多java的笔试题中也会叫笔试者写出单例模式的那几种写法并且分析.那么下面就来轻轻地探讨一下,最简单的设计模式, ...
- java设计模式之单例模式(几种写法及比较)
概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...
随机推荐
- 一款实用的viewer.js 图片相册
Viewer.js 是一款强大的图片相册插件,像SNS交友网站一般都会用到点击缩略图,弹出层大图片,而且弹出层有多个控制按钮,比如放大缩小.旋转.撤回等,底部有缩略图列表可切换. 支持移动设备触摸事件 ...
- 连接QuickBooks Online实现于IOS App数据同步功能的个人记录
公司项目需要用WebService与QBO实现后台数据同步,由于国内没有做过类似第三方产品接口的资料,前前后后找了N久,终于实现功能,现把实现功能步骤贴上来分享: QBO开发者地址(主要用于创建QBO ...
- Android Handler机制(三)----Looper源码解析
一.Looper Looper对象,顾名思义,直译过来就是循环的意思,从MessageQueue中不断取出message. Class used to run a message loop for a ...
- 不用画线 设置UITableView的全屏分隔线
如图 添加如下代码 sTableView.separatorInset = UIEdgeInsetsZero; sTableView.layoutMargins = UIEdgeInsetsZero ...
- DNS劫持解决方法
刚在家上网,发自己的浏览器竟然还会弹出页面广告(我浏览器装了屏蔽广告的浏览器应用,理论上就不会出现什么弹出来的广告). 于是自己仔细研究了下,发现在易迅的页面竟然嵌套了一个iframe,首先易迅肯定不 ...
- php设计模式 适配器模式
适配器模式,可以将截然不同的函数接口封装成统一的API: 应用举例,PHP的数据库操作有Mysql.Mysqli.pdo三种,可以用适配器模式统一成一致,类似的场景还有cache适配器,将memcac ...
- HTML5离线存储原理
找到一篇介绍离线缓存的,感觉比之前看到的解释的更透彻,新的知识点记录如下: 大家都知道Web App是通过浏览器来访问的,所以离线状态下是无法使用app的.其中web app中的一些资源并不经常改变, ...
- mysql常用函数汇总
一.数学函数ABS(x) 返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x) 返回大于x的最小整数值EXP(x) 返回值e(自然对数 ...
- JavaScript Patterns 6.2 Expected Outcome When Using Classical Inheritance
// the parent constructor function Parent(name) { this.name = name || 'Adam'; } // adding functional ...
- coursera机器学习-聚类,降维,主成分分析
#对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...