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 远程图片保存到本地的函数类
Dec 08 PHP
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
May 27 PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 PHP
解析php中如何调用用户自定义函数
Aug 06 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
PHP foreach遍历多维数组实现方式
Nov 16 PHP
PHP中递归的实现实例详解
Nov 14 PHP
PHP的mysqli_stat()函数讲解
Jan 23 PHP
PHP操作XML中XPath的应用示例
Jul 04 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安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
Javascript alert消息换行的方法
2013/08/07 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
JavaScript中的this,call,apply使用及区别详解
2016/01/29 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
微信小程序 本地数据读取实例
2017/04/27 Javascript
Angular实现下载安装包的功能代码分享
2017/09/05 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
在漏洞利用Python代码真的很爽
2007/08/26 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
Python重新加载模块的实现方法
2018/10/16 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
2019/02/14 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
C++是不是类型安全的
2014/02/18 面试题
delegate与普通函数的区别
2014/01/22 面试题
领导干部贪图享乐整改措施
2014/09/21 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
先进工作者申报材料
2014/12/23 职场文书
大足石刻导游词
2015/02/02 职场文书
个人培训总结
2015/03/05 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
暗恋桃花源观后感
2015/06/12 职场文书