所谓的单例模式简而言之就是某个类在运行过程中只有一个实例,并且能够自行实例化并为整个系统的运行提供这个实例。在数据库连接中使用单例模式实例化数据库连接对象主要是可以避免重复的实例化对象而造成资源的浪费。

php实现数据库连接对象单例模式主要包括三点:

1 需要一个保存类的唯一实例静态成员变量,一般为$_instance private变量;

private $_instance;

2 构造函数和克隆函数必须声明为私有,防止被外部实例化类;

private function __construct{

}

private function __clone(){

}

3 必须提供一个访问这个实例的公共静态方法,一般为getInstance方法,且返回一个实例的引用;

static public function getInstance(){

  if(is_null(self::$_instance) || !isset(self::$_instance)){

     self::$_instance = new DB();

  }

  return self::$_instance;

}

使用单例模式最大的目的主要是实现应用中只有一个类的实例,在java或者.net这些编译型的语言是可以保证这个唯一的实例常驻在内存中,并持续到整个应用程序生命周期的结束,但是在php这种解释型的语言中,由于这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存,所有的变量无论是全局变量还是类的静态成员,都是页面级的(不是应用级别的),每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了,所以PHP单例模式只是在单次页面级请求时出现多个应用场景并需要共享同一对象资源时体现出优势。

不过话又说回来,对于java等编译型语言,单例可以常驻内存并被整个应用复用,但是在高并发的情况下,是否会出现使用上的问题呢?因为每个请求都是使用同一个实例,肯定会存在调用上的问题的,因此,对于多用户java系统,数据库实例设计为单例模式是有问题的,存在一个排队的问题,可以由数据库引擎自行解决。因此,在php中使用单例模式对于任何系统都是有优势的,因为php的语言特点决定这个单例只是页面级别的,当页面的php代码执行完毕之后就会被自动释放,对于一个页面有多个数据库使用的场景来说,是可以很好的节约资源,从提高系统的性能。

转载于:https://www.cnblogs.com/springdong/p/3203796.html

php应用数据库连接中的单例模式相关推荐

  1. 单例模式访问mysql设计类图_如何应用策略设计模式分离JDBC数据库连接中的外部环境信息...

    软件项目实训及课程设计指导--如何应用策略设计模式分离JDBC数据库连接中的外部环境信息 1.什么是策略(Strategy)设计模式 策略设计模式把"算法"(也就是软件应用系统中的 ...

  2. 【C++】C/C++ 中的单例模式

    目录 part 0:单例模式3种经典的实现方式 Meyer's Singleton Meyers Singleton版本二 Lazy Singleton Eager Singleton Testing ...

  3. C# 中实现单例模式

    文章目录 简介 不安全线程的单例模式 简单安全线程带锁 双重检查 - 带锁 安全初始化 安全并且懒汉式静态初始化 带泛型的懒汉式单例 异常 提高效率 总结 简介 单例模式是软件工程中广为人知的设计模式 ...

  4. python编程入门单例_常见的在Python中实现单例模式的三种方法

    单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在 ...

  5. Java中的单例模式

    2019独角兽企业重金招聘Python工程师标准>>> 最近网上查找资料做了一下总结,Java中的单例模式主要是有以下两种实现方式: 1.public class Singleton ...

  6. 在Java中实现单例模式的有效方法是什么? [关闭]

    在Java中实现单例模式的有效方法是什么? #1楼 我使用Spring框架来管理我的单身人士. 它不会强制类的"单一性"(如果涉及多个类加载器,您将无法真正做到),但是它提供了一种 ...

  7. java 单例模式打包jar_在 Spark 中实现单例模式的技巧

    单例模式是一种常用的设计模式,但是在集群模式下的 Spark 中使用单例模式会引发一些错误.我们用下面代码作例子,解读在 Spark 中使用单例模式遇到的问题. object Example{ var ...

  8. java 多线程的单例模式,Java多线程中的单例模式两种实现方式

    Java多线程中的单例模式 一.在多线程环境下创建单例 方式一: package com.ietree.multithread.sync; public class Singletion { priv ...

  9. android studio列模式,在Android studio 中使用单例模式

    本篇简单介绍如何在Android studio中 使用单例模式和使用注意事项. 单例模式 为什么要使用单例模式? 有一些对象我们只需要一个,只需要一个线程池 .缓存或是只有一台打印机.机器人 .机器人 ...

最新文章

  1. HashMap面试深入详解jdk1.8
  2. 腾讯2013年校园招聘笔试试题
  3. java的静态变量怎么赋值_java static变量可以赋值吗?
  4. 第四章:手机平板要兼顾-探究碎片
  5. 用python自制背单词程序_c++自制背单词应用
  6. php外卖系统源码单店,网上订餐系统 v3.1 单店版
  7. 夫妻俩在互联网公司工作,年收入曝光,网友:这么高!
  8. SpringBoot面试常问
  9. 丿领先丶Tem 招人~
  10. SKlearn - ValueError: Unknown label type: 'continuous'
  11. 用python写bp神经网络作价格预测_bp神经网络预测python
  12. opencv 处理黑夜_Python基于OpenCV的固定位置半透明水印去除两种方案
  13. VPS云服务器搭建FTP并连接
  14. 2021-09-14
  15. 计算机的清屏,计算机清屏键是什么
  16. 华为专家 | 轻量化微服务测试实践
  17. 微信小程序的开发之日期、星期选择功能
  18. 1925: [Sdoi2010]地精部落
  19. 实战Java高并发程序设计(第二版)-chp5并行模式与算法
  20. 注册测绘师笔记(三)

热门文章

  1. matlab中nc文件,MATLAB读取.nc文件
  2. Matlab传递函数的几种生成方式
  3. centos7下安装低版本mysql_centos7下使用yum安装制定版本mysql
  4. 字符串换行截取_textwrap 文本自动换行与填充
  5. hexo评论_Hexo系列 | Hexo的基本使用
  6. 打印的图片不清晰_如何调节图片kb,但又不改变图片的清晰度?
  7. python字符串转化为long_Java带有运算符的字符串转换为Long型
  8. auto.js id为参数滑动_【Autojs教程】02Autojs PC端开发调试环境搭建
  9. 搞硬件,别吹牛了,好好做个规划!
  10. java bitset 扩展_将java BitSet保存到DB