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生成自己的LOG文件
Oct 09 PHP
劣质的PHP代码简化
Feb 08 PHP
php解决约瑟夫环示例
Apr 09 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
Jul 11 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
php 利用array_slice函数获取随机数组或前几条数据
Sep 30 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
yii框架无限极分类的实现方法
Apr 08 PHP
关于PHP求解三数之和问题详析
Nov 09 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代码简化
2010/02/08 PHP
检测png图片是否完整的php代码
2010/09/06 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
Javascript面向对象之四 继承
2011/02/08 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
python实现中文输出的两种方法
2015/05/09 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
Html5页面获取微信公众号的openid的方法
2020/05/12 HTML / CSS
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
MySQL面试题目集锦
2016/04/14 面试题
护理中职生求职信范文
2014/02/24 职场文书
小学生操行评语
2014/04/22 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
个人创业事迹材料
2014/12/30 职场文书
社区法制宣传月活动总结
2015/05/07 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js