php利用单例模式设计数据库连接Model类

TP5中Db类与Model类关系 在以 ThinkPHP 作为后台框架时,经常使用 Db 类操作和 Model 类继承,感觉两者密切相关,毕竟都是操作数据库,难道还能写两套代码? 那它们之间是什么关系呢? 花了些时间阅读了源码,整理了一张结构图,以备遗忘。 上图中,Query 查询对象地位特别重要,条条细线通Query,哈哈。 Query 具备数据库操作的所有接口,是对 Connection 类的进一步封 阅读详情

之前在《【php】利用php的构造函数与析构函数编写Mysql数据库查询类》(点击打开链接)写过的Mysql数据库查询类还不够完美,利用《【Java】单例模式》(点击打开链接)介绍的思想可以将这个数据库链接类搞成单例,不会因为多个用户访问网站就创建一个数据库查询实例,拖慢整个网站的速度,让网站的数据库压力比较大,造成网站的速度下降得很厉害。

单例实现最关键的,还是那3点:

1、私有构造函数,这里无须像Java那样私有无参数的构造函数,php不允许有多个构造函数——即使这些构造函数参数不同也不可以。

2、私有克隆类的函数

3、暴露一个公有的“创造实例函数”供调用,这个“创造实例函数”判断如果已存在相应实例,返回此实例,没有才创建。

这样保证此数据库连接类有且只有一个。

直接用一个例子说明,数据库test中有表user


先利用利用单例模式设计数据库连接Model类,将这张表的内容查询到网页上:


具体代码如下:

[php]  view plain  copy
  1. <?php  
  2. class db{  
  3.     private $link;  
  4.     //db类单例开始  
  5.     //保存类实例的私有静态成员变量  
  6.     private static $_instance;  
  7.     //定义一个私有的构造函数,确保单例类不能通过new关键字实例化,只能被其自身实例化  
  8.     private function __construct($host,$username,$password,$database){  
  9.         $this->link=mysql_connect($host,$username,$password);  
  10.         if(!$this->link){  
  11.             die("连接失败!");  
  12.         }  
  13.         mysql_query("set names utf8;");  
  14.         mysql_select_db($database);  
  15.     }  
  16.     //定义私有的__clone()方法,确保单例类不能被复制或克隆  
  17.     private function __clone(){}  
  18.     public static function getInstance($host, $username, $password,$database) {  
  19.         //检测类是否被实例化  
  20.         if(!(self::$_instance instanceof self)){  
  21.             self::$_instance=new db($host,$username,$password,$database);  
  22.         }  
  23.         return self::$_instance;  
  24.     }  
  25.     //执行SQL语句  
  26.     public function query($query){  
  27.         return mysql_query($query, $this->link);  
  28.     }  
  29.     //关闭数据库连接  
  30.     public function close(){  
  31.         return mysql_close($this->link);  
  32.     }  
  33. }  
  34. //调用单例类测试部分  
  35. header("Content-type: text/html; charset=utf-8"); //设置网页编码  
  36. $dbconnector=db::getInstance("localhost","root","root","test");//创建数据库连接类  
  37. $result=$dbconnector->query("select * from user");//查询数据库  
  38. for($i=0;$row=mysql_fetch_array($result);$i++){//打印查询结果  
  39.     echo $row['id'].",".$row['username'].",".$row['password']."<br/>";  
  40. }    
  41. ?>  

这样保证了class db所对应的实例$dbconnector有且只有一个,再有一句:

[php]  view plain  copy
  1. $dbconnector1=db::getInstance("localhost","root","root","test");//创建数据库连接类  

还是会返回原来的已经创建实例$dbconnector,更应该说操作$dbconnector与$dbconnector1是同样的效果,它们就是同一个东西,不会在服务器的内存上多开辟资源来存放$dbconnector与$dbconnector1,因为db被单例了,从而达到减少数据库压力的目的。

原文链接

PHP中mvc框架的的model 关于mvc这里介绍下model:  model相当于一个数据库模型,专门对数据库做处理,比如说你要对数据库做增删改查的操作,就可以通过调用model类来实现, 因为它就是与数据库沟通的桥梁。 model类是一个实体类用来保存数据库表格中的一条记录的所有字段的数据,并且可以验证这条记录数据的完整性。 新手刚开始学php中的mvc模式时需要自己手动编写model类 首先我们需要有一个配置 阅读详情

相关推荐

连接数据库单例模式

连接数据库单例模式

【php】利用单例模式设计数据库连接Model类

之前在《【php】利用php的构造函数与析构函数编写Mysql数据库查询类》(点击打开链接)写过的Mysql数据库查询类还不够完美,利用《【Java】单例模式》(点击打开链接)介绍的思想可以将这个数据库链接类搞成单例,不会因为多个用户访问网站就创建一个数据库查询实例,拖慢整个网站的速度,让网站的数据库压力比较大,造成网站的速度下降得很厉害。 单例实现最关键的,还是那3点: 1、私有构造函数,这

编程记录,亲测有效 4217

PHP单例设计模式,连接多数据库源码

PHP单例设计模式,连接多数据库源码 单例模式的三个特点 1: 一个类只能有一个实例 2: 它保修自行创建这个实例 3: 必须自行向整个系统提供这个实例. 单例模式中主要的角色 Singleton定义一个Instance操作,允许客户访问它唯一的实例. Instance是一个类方法,负责创建它唯一的实例. 单例的优点 1: 对唯一实例的受控访问 2: 缩小命名空间 单例模式是对全局变量的一种改进,它避免了那些存储唯一实例的全局变量污染命名空间. 3: 允许对操作和表示的精华 单例类可以有子类. 而且用这个扩展类的实例来配置一个应用是很容易的,你可以用你所需要的类的实例在运行时刻配置应用 4: 允许可变数目的实例 5: 比类操作灵活 单例模式适用场景 1: 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它的时候. 2: 当这个唯一的实例应该是通过子类化可扩展的.并且用户应该无需更改代码就能使用到一个扩展的实例时.

php单例模式连接数据库--代码实现

单例模式在特定的情况下可以节省资源的消耗,例如同一页面对数据库的多次操作,不需要去new多次从而节省了资源。 单例模式的关键在于php中的“instanceof”,它用来检测一个变量是否是某个类的一个实例。 同时,为了防止用户去new实例,需要将“__construct”函数权限设置为private。 为了防止用户进行clone,也要重写“__clone”方法。<?php /* * 单例数据

梁吉林的博客 5299

PHP单例模式访问数据库

PHP单例模式访问数据库 php 单例模式 数据库 设计模式

MacOS M芯片部署ComfyUI:从环境排雷到插件生态一站式指南

本文为MacOS M系列芯片用户提供了一份详尽的ComfyUI部署指南。文章深入剖析了因架构差异导致的常见安装报错根源,并给出了基于MPS后端的正确PyTorch安装命令。从创建纯净Python虚拟环境、分步安装依赖,到验证GPU加速,手把手指导完成部署。同时,还推荐了包括管理器、汉化在内的必备插件,以完善使用生态,帮助用户一站式解决从环境搭建到效率提升的所有问题。

weixin_29261711的博客 994

php单例模式连接数据库封装类

单例模式有三大原则: 构造函数不能为public 有一个保存实例的静态成员变量 拥有访问这个实例的公共静态方法 基于单例模式的php数据库连接类: [php] view plain copy class Db{       static private $_instance;       static pr

NanGe_BoKe 1395

python使用TensorRT报错,多线程或多进程中使用问题

python使用TensorRT报错,Cuda Runtime问题

qq_44224801的博客 747

PHP 单例模式连接数据库

<?php /* * 单例数据库连接 */ class Db { private static $_instance; //static可以保存值不丢失 private static $_dbConnect; private $_dbConfig = array( 'host' => '127.0.0.1', 'user' => 'roo

hcy48的博客 2256

tuts4you-lena151-Crackme-tutorial06

一、前言      本次研究的是lena151-Crackme-tutorial06,也是一个应用程序,但因为平台迭代的关系,程序不能正常运行,只能完成部分破解。 (一)·本次我们要破解的目标是个应用程序,如下图 (二)、使用工具:x32dbg 二、过程 这个程序的破解的方法很多,首先最简单的一种不外乎就是搜索字符串,我就按照这个思路来完成。 (一)查找字符串&lt;Unregis...

h123120的专栏 520

php model类设计,php利用单例模式设计数据库连接Model类

之前在《【php】利用php的构造函数与析构函数编写Mysql数据库查询类》(点击打开链接)写过的Mysql数据库查询类还不够完美,利用《【Java】单例模式》(点击打开链接)介绍的思想可以将这个数据库链接类搞成单例,不会因为多个用户访问网站就创建一个数据库查询实例,拖慢整个网站的速度,让网站的数据库压力比较大,造成网站的速度下降得很厉害。单例实现最关键的,还是那3点:1、私有构造函数,这里无须像...

weixin_42302763的博客 221

一个AI Agent顶十个软件,toB赛道正在大洗牌

一个AI Agent顶十个软件,toB赛道正在大洗牌

ith321的博客 1331

php单例模式 封装数据库连接,php单例模式设计数据库并连接Model类

利用《【Java】单例模式》(点击打开链接)介绍的思想可以将这个数据库链接类搞成单例,不会因为多个用户访问网站就创建一个数据库查询实例,拖慢整个网站的速度,让网站的数据库压力比较大,造成网站的速度下降得很厉害。单例实现最关键的,还是那3点:1、私有构造函数,这里无须像Java那样私有无参数的构造函数,php不允许有多个构造函数——即使这些构造函数参数不同也不可以。2、私有克隆类的函数3、暴露一个公...

weixin_42120283的博客 158

论文解读--Phase Noise in FMCW Radar Systems

相位噪声是现代雷达、通信、光谱和计量系统的基本性能参数之一。本文提出了一种适用于FMCW雷达系统的相位噪声理论。导出了一个新的设计方程,用于确定雷达系统中允许的源相位噪声电平的最大界。分析了在传输延迟小于参考振荡器相干时间时,相干混频引起的非线性相位噪声去相关函数;讨论了在传输延迟大于参考振荡器相干时间时,目标响应的频谱展宽。提出了收发链中各子系统的影响,并讨论了一种新的ADC相位噪声模型。介绍了相位噪声建模技术,然后将锁相环频率合成器与低噪声频率合成器进行比较,以演示减少相位噪声边带以改善检测和跟踪性能。

奔袭的算法工程师 3767

基于电子海图的水面无人艇全局路径规划

Research and Implementation of Global Path Planning for Unmanned Surface Vehicle Based on Electronic Chart (基于电子海图的水面无人艇全局路径规划)   该论文已经在ICMIR2017会议上发表,附上springer的文献地址 Research and Implementation of Gl...

weixin_30797199的博客 1591

单例模式访问mysql设计类图_利用单例模式设计数据库连接Model类

之前在《【php】利用php的构造函数与析构函数编写Mysql数据库查询类》(点击打开链接)写过的Mysql数据库查询类还不够完美,利用《【Java】单例模式》(点击打开链接)介绍的思想可以将这个数据库链接类搞成单例,不会因为多个用户访问网站就创建一个数据库查询实例,拖慢整个网站的速度,让网站的数据库压力比较大,造成网站的速度下降得很厉害。单例实现最关键的,还是那3点:1、私有构造函数,这里无须像...

weixin_35697229的博客 244

SAP SLT 在 carve-out 场景中的关键作用:从理论到实操全景展现

深入剖析 SAP Landscape Transformation(SLT Replication Server)在 carve‑out 场景中的价值,需要从 carve‑out 本身的背景逻辑说起。carve‑out 指的是企业因并购、拆分、剥离商业单元等因素,而将 SAP 系统中某部分业务(例如组织单元、公司代码、模块数据等) separated 出来,导入到独立的系统中。这一过程极具挑战性,既要确保业务连续性,又要实现数据精准迁移和系统隔离 (

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 7554

php model类,php实现的简单数据库操作Model类

本文实例讲述了php实现的简单数据库操作Model类。分享给大家供大家参考,具体如下:该数据库模型类可实现数据库的增删改查,简化数据库操作。1. config.php代码:define("HOSTNAME","127.0.0.1");define("USERNAME","root");define("PASSWORD","");define("DATANAME","class");2. 使用代码:...

weixin_32689769的博客 728

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Laravel 同时连接多个数据库

Laravel 同时连接多个数据库 上文说到thinkphp3.2同时连接两个数据库的文章,然后在总结下laravel同时连接 多个数据库的实例,方便新手学习,db连接以及model连接。 配置.env 文件 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database_name DB_USERNAME=root DB_PASSWORD=...

WXiangQian 3008

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

php model类,PHP模型Model类封装数据库操作示例

本文实例讲述了php模型model类封装数据库操作。分享给大家供大家参考,具体如下://引入配置文件include "./config.php";class model{public $link;//存储连接对象public $tablename = "";//存储表名public $field = "*";//存储字段public $allfields = [];//存储当前表所有字段publi...

weixin_36050604的博客 474

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

用PHP开始你的MVC(三)实现你的Model层

三、实现你的Mode层Model层,就是MVC模式中的数据处理层,用来进行数据和商业逻辑的装封,进行他的设计的时候设计到三个个概念:------Model类。是实体类。用来保存数据库表格的中一条记录的所有字段的数据。并且可以验证这条记录数据的完整性。------ModelManager类。 是实体类的管理类。通常每一个实体类(Model)都要有一个对应的管理类(ModelManager)。管理类可

锻炼肌肉,防止挨揍 7706

thinkphp5针对model层模型-独立配置数据库连接,实现连接多个数据库的方法

超简单thinkphp5针对model层模型-独立配置数据库连接,实现链接多个数据库的方法,实现了thinkphp5不同model层连接不同的数据库功能

徊忆羽菲 2130

db类操作数据库

db类操作数据库 增删改查+循环+判断 按照MVC的架构.对数据的澡作应该放在Model中完成.但如果不使用Model,我们也可以用laravel框架提供的DB类操作数据库·而且,对于某些极其复杂的sql,用Model已经很难完成.遥绷趁逮直查结获迈胡·使用旦DO类去执行原生纽·经rave!中DO类的基本用法DB::table['tablename']获取操作tablename表的实例. 数据表的创建与配置 创建数据库的方式 ​ 1.sql语句 ​ 2.图形界面 ###建立数据表和测试表: 配

jzhangc的博客 1386

利用单例模式设计数据库连接Model类

之前在《【php】利用php的构造函数与析构函数编写Mysql数据库查询类》(点击打开链接)写过的Mysql数据库查询类还不够完美,利用《【Java】单例模式》(点击打开链接)介绍的思想可以将这个数据库链接类搞成单例,不会因为多个用户访问网站就创建一个数据库查询实例,拖慢整个网站的速度,让网站的数据库压力比较大,造成网站的速度下降得很厉害。 单例实现最关键的,还是那3点: 1、私有构造函数,这...

weixin_33859844的博客 263
上一篇: JS实现网站悬浮广告
下一篇: PHP单例模式和工厂模式用法实例详解
code301
博客等级 码龄9年 87粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值