PHP中数据库单例模式的实现代码分享


Posted in PHP onAugust 21, 2014

首先我们要知道明确单例模式这个概念,那么什么是单例模式呢?

单例模式顾名思义,就是只有一个实例。

作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类我们称之为单例类。

单例模式的要点有三个:

一是某个类只能有一个实例;
二是它必须自行创建这个实例;
三是它必须自行向整个系统提供这个实例。

下面我们讨论下为什么要使用PHP单例模式?

多数人都是从单例模式的字面上的意思来理解它的用途, 认为这是对系统资源的节省, 可以避免重复实例化, 是一种"计划生育". 而PHP每次执行完页面都是会从内存中清理掉所有的资源. 因而PHP中的单例实际每次运行都是需要重新实例化的, 这样就失去了单例重复实例化的意义了. 单单从这个方面来说, PHP的单例的确有点让各位失望. 但是单例仅仅只有这个功能和应用吗? 答案是否定的,我们一起来看看。

1. php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时(废话), 如果使用单例模式, 则可以避免大量的new 操作消耗的资源。

2. 如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看zend Framework的FrontController部分。

3. 在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。

class db {
  public static $cennct = null;
  private function __construct(){return false;}
  private function conn(){
    $pdo = new PDO('mysql:host=localhost;dbname=dbname','root','');
    $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);    
    $pdo->query('set names utf8');            
    return $pdo;                  
  }
  public static function getdb(){
    if(self::$cennct == null )
      self::$cennct = self::conn(); 
      return true;
  }
  protected function fetch($sql,$param=array()){
    $this->getdb();
    $tmp = self::$cennct->prepare($sql);
    $tmp->execute($param);
    return $tmp->fetch(PDO::FETCH_ASSOC);
  }
  protected function fetchAll($sql,$param=array()){
    $this->getdb();
    $tmp = self::$cennct->prepare($sql);
    $tmp->execute($param);
    return $tmp->fetchAll(PDO::FETCH_ASSOC);     
  }
  protected function execute($sql,$param=array()){
    $this->getdb(); 
    $tmp = self::$cennct->prepare($sql);
    return $tmp->execute($param);
  }
}

以上为一个数据库操作单例模式

PHP 相关文章推荐
PHP下对数组进行排序的函数
Aug 08 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
Nov 10 PHP
php使用json_encode对变量json编码
Apr 07 PHP
CI框架中zip类应用示例
Jun 17 PHP
php文件夹的创建与删除方法
Jan 24 PHP
PHP网络操作函数汇总
May 18 PHP
php导出中文内容excel文件类实例
Jul 06 PHP
php实现购物车功能(下)
Jan 05 PHP
Thinkphp框架开发移动端接口(1)
Aug 18 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
laravel 判断查询数据库返回值的例子
Oct 11 PHP
tp5框架的增删改查操作示例
Oct 31 PHP
PHP中的日期加减方法示例
Aug 21 #PHP
PHP中比较时间大小实例
Aug 21 #PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
Aug 21 #PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 #PHP
PHP实现的多彩标签效果代码分享
Aug 21 #PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 #PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
Aug 21 #PHP
You might like
php单态设计模式(单例模式)实例
2014/11/18 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
php正则表达式使用方法整理集合
2020/01/31 PHP
JS自调用匿名函数具体实现
2014/02/11 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
jQuery学习心得总结(必看篇)
2016/06/10 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
python构建深度神经网络(续)
2018/03/10 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
python实现一个简单的udp通信的示例代码
2019/02/01 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
宝塔面板成功部署Django项目流程(图文)
2020/06/22 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
中国高端家电购物商城:顺电
2018/03/04 全球购物
一套VC试题
2015/01/23 面试题
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
某公司C#程序员面试题笔试题
2014/05/26 面试题
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
村委会贫困证明范文
2014/09/21 职场文书
观后感的写法
2015/06/19 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA