/**

* 单例模式

* @author YangYang <1812271619@qq.com>

* 可以想成在一次http请求中只产生该类的一个对象(即只new classname一次)

* 经典的例子是数据库连接(redis,mongodb,memcache等)

* 在一次http请求中我们可能需要对数据库做增删改查多条sql操作

* 但是如果一次http请求中每执行一条sql我们就mysql_connect(),很明显会导致服务器资源的浪费

* 为了节约资源,就可以通过单例模式来实现一次http请求只做一次mysql_connect()

* 即将mysql_connect()放在类方法的__construct中,并将__construct方法做成私有,

* 这样只能通过getInstance()方法来获得mysql_connect()的资源连接符

* getInstance()方法中判断是否已经存在myql连接符,如果存在就直接返回该连接符

* 否则new classname()即调用了__construct方法执行了mysql_connect()得到了资源连接符,并返回连接符

* 因为现在PHP已不再建议直接使用mysql函数进行数据库操作,而是建议通过PDO进行数据库操作,所以这里写一个简易PDO连接的单例模式

* 这里只是讲解单例原理,数据库的防sql注入等问题不做考虑

* 准备工作 数据库:test 数据表:user 字段:id name 记录:1 CodeAnti

* 最终运行结果: 数据表user中id=1这条记录被删除

*/

class SinglePDO

{

private static $_instance = null;

private $_pdo;

//私有,防止外部直接实例化new SinglePDO(...)

private function __construct($dsn,$dbUser,$dbPassword)

{

try{

$this->_pdo = new PDO($dsn,$dbUser,$dbPassword);

$this->_pdo->exec('set names utf8');

}catch(PDOException $e){

die("Error:{$e->getMessage()}");

}

}

//私有,防止克隆

private function __clone(){}

//获取连接实例

public static function getInstance($dsn,$dbUser,$dbPassword)

{

if(self::$_instance === null)

self::$_instance = new self($dsn,$dbUser,$dbPassword);

return self::$_instance;

}

//执行sql

public function execSql($sql)

{

$result = $this->_pdo->exec($sql);

return $result;

}

}

$dsn = "mysql:host=localhost;dbname=test";

$dbUser = "root";

$dbPassword = "";

$sql = "delete from user where id = 1";

$pdo = SinglePDO::getInstance($dsn,$dbUser,$dbPassword);

$result = $pdo->execSql($sql); //$pdo->execSql($sql)多次调用,但仍然是同一个pdo对象

print_r($result);

php单例模式pdo,PHP 单例模式理解相关推荐

  1. java单例模式_java设计模式-单例模式

    1.单例(Singleton)模式定义 指一个类只有一个实例,且该类能自行创建这个实例的一种模式. 2.单例模式特点 单例类只有一个实例对象: 该单例对象必须由单例类自行创建: 单例类对外提供一个访问 ...

  2. java单例模式_Java 实现单例模式的 9 种方法

    Linux编程点击右侧关注,免费入门到精通! 作者丨java团长 一. 什么是单例模式 因进程需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单 ...

  3. 设计模式-单例模式-注册式单例模式-枚举式单例模式和容器式单例模式在Java中的使用示例

    场景 设计模式-单例模式-饿汉式单例模式.懒汉式单例模式.静态内部类在Java中的使用示例: 设计模式-单例模式-饿汉式单例模式.懒汉式单例模式.静态内部类在Java中的使用示例_霸道流氓气质的博客- ...

  4. 单例模式之懒汉式单例模式

    单例模式之懒汉式单例模式 本文将探讨三种懒汉式单例模式,会从代码的运行效率,线程安全等方面探讨. 在上一篇文章中,刚刚介绍饿汉式单例模式,在本文开头先简单的说一下懒汉式单例模式和饿汉式单例模式的区别: ...

  5. qt 单例模式实际应用 单例模式自定义对话框类

    C++设计模式之单例模式讲到单例模式的基本语法,本文给一个qt开发中单例模式常用的例子--消息对话框 1.为了美化用户操作界面,我们需要自定义对话框但是又想像系统QMessageBox一样的用法,直接 ...

  6. java 单例模式 泛型_单例模式 泛型

    using System; namespace ConsoleSingletonTest { /** 单例模式(Singleton) 泛型 单例模式 * 定义:单例模式的意思就是只有一个实例(整个应用 ...

  7. 深入理解设计模式-单例模式(饿汉单例模式、懒汉单例模式、双锁单例模式)

    深入理解设计模式-双锁单例模式 文章目录 一.什么是单例模式 二.应用场景 三.优缺点 四.代码实现 总结 结尾 一.什么是单例模式 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个 ...

  8. 什么是单例模式,单例模式的作用,单例模式的用法 一站式解决单例模式

    1.什么是设计模式? 首先我们来看第一个问题什么是设计模式?在百度百科中它的定义是这样的: 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. ...

  9. php单例模式例子,PHP单例模式

    问:什么是单例模式? 单例模式(Singleton):用于为一个类生成一个[全局][唯一]的对象:目的是复用以及不可修改性,可以理解为全局静态变量(从语言层面,任何对象都是一种有较复杂数据结构的变量) ...

最新文章

  1. 微软嵌入式WEC2013产品研讨会(深圳站---2013.10.16)
  2. 怎样用VB编写.DLL动态链接库文件 1
  3. CODEVS-3303-翻转区间
  4. Remote PC另类用法:远程控制
  5. java中引用数组_javaOO——引用数组
  6. 【实践】HMM模型在贝壳对话系统中的应用
  7. pdflib textflow
  8. 2021文科跨考计算机经验贴(个人分享用,科目408)
  9. easyui增删改查全部代码
  10. 肯德尔系数怎么分析_SPSS统计案例笔记16:相关分析之kendall系数
  11. python列举字符串的五种常用方法_python中字符串、列表、元组、字典每个常用的5个方法...
  12. linux下ace安装教程,linux下安装ACE开发环境
  13. 电子病历质控系列-医疗质量工作任务003
  14. C语言入门,C语言学习方法,初学者必看
  15. [Ubuntu]使用DataDog集成跟踪Django项目
  16. 开源机器人库orocos KDL 学习笔记(五):Inverse Kinematric
  17. AI+CFD:面向空天动力的科学机器学习新方法与新范式
  18. 什么是寄存器(Register)?收藏
  19. LVS(DR)+Keepalive高可用+Zabbix监控脑裂
  20. 风变Python之旅4---字典列表的学习

热门文章

  1. J2EE中使用Spring AOP框架和EJB组件(1)
  2. python 创意编程 全国-中学生Python创意编程
  3. 关于.net framework4.0以及4.5安装失败,“安装时发生严重错误”……
  4. MySQL去重关键字的使用
  5. 一个基于Directshow实现的音频播放器,支持歌词显示
  6. ubuntu php5 gd库,Ubuntu下php使用GD库笔记
  7. 【GD32L233C-START】10、硬件SPI1驱动RC522
  8. 对于DOM操作你了解多少(手风琴+选字游戏)
  9. 4600php,Intel HD Graphics 4600性能相当于什么显卡?
  10. c语言之排序算法(一)