用单例模式封装实现一个数据库类

2023-11-17

使用单例模式的出发点:  

  1、php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。

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

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

创造单例注意:

  1、一个雷只能有一个类对象(只能实例化一个对象)

  2、它必须自己创建这个实例

  3、它必须自行向整个系统提供这个实例

  4、构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去单例模式的意义

  5、 getInstance()方法必须声明为公有的,必须调用此方法以返回唯一实例的一个引用

  6、拥有一个保存类的实例的静态成员变量

  7、PHP的单例模式是相对而言的,因为PHP的解释运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收

  8、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)

  另外,需要创建__clone()方法防止对象被复制(克隆)

代码如下:

 1 <?php
 2 class Danli
 3 {
 4 
 5 //保存类实例的静态成员变量
 6     private static $_instance;
 7 
 8 //private标记的构造方法
 9     private function __c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用单例模式封装实现一个数据库类 的相关文章

  • 展平数组:保持索引、值等于数组中的位置

    我在尝试以特定方式展平数组时遇到了一些麻烦 这里有一个print r我想要展平的数组的视图 Array 1 gt Array 8 gt 1 9 gt 2 10 gt Array 15 gt Array 22 gt 1
  • 如何在 json 中输出 javascript 日期

    我正在尝试时间线图表 http code google com apis visualization documentation gallery annotatedtimeline html Data Format http code go
  • 获取给定日期时间集的每月第一个星期一

    我需要什么 我有一个特定的日期时间列表 我想获取每个日期时间的第一个星期一 例如 假设给定的日期时间是 2013 07 05 2013 08 05 2013 09 13 etc 我想获得所有这些日期时间的第一个星期一 以便输出结果 2013
  • Codeigniter PHP - 在锚点加载视图

    我在一个长页面的底部有一个表单 如果用户填写了表单但它不验证页面是否以典型的 codeigniter 方式重新加载 this gt load gt view template data 然而 由于表单位于页面底部 我需要将页面加载到那里 就
  • PHP 读取使用 setcookie() 创建的 cookie

    来自manual https www php net setcookie 直到下一次加载 Cookie 应该可见的页面之前 Cookie 才会变得可见 这意味着创建的 cookiesetcookie将无法访问 COOKIE直到下一页加载 有
  • PHP 删除字符最后一个实例之前的所有内容

    有没有办法删除某个字符之前的所有内容 包括最后一个实例 我有多个字符串 其中包含 gt e g the gt cat gt sat gt on gt the gt mat welcome gt home 我需要对字符串进行格式化 以便它们变
  • 将 PHP 中的 openssl AES 转换为 Python AES

    我有一个 php 文件 如下所示 encryption encoded key c7e1wJFz PBwQix80D1MbIwwOmOceZOzFGoidzDkF5g function my encrypt data key encrypt
  • 禁用外部点击时关闭模式

    我正在制作一些使用模式的博客物质化 但我的模态 onclick 外部和错误数据有问题 这是我的代码 main js function changepassword var user userlog val var content conte
  • DataTables 第 2 页的分页未调用放大弹出窗口

    所以我有这个启用分页的数据表 我编码了一种方式 以便用户可以编辑表的行 当用户调用它在放大弹出窗口中打开的编辑页面时 它在第 1 页 从第 2 页起都运行良好 DataTable 及其前面停止调用 Magnific Popup 我只是不明白
  • Symfony 生成器形式、原则和 M:N 关系

    我有一个基本的 M N 设置 包含三个表 candidate position 和 Candidate position 这是 MySQL Workbench 的 ERD 屏幕截图 现在 我们继续讨论表单 在 symfony 生成器的默认世
  • PHP 电子邮件验证[重复]

    这个问题在这里已经有答案了 For PHP最好的电子邮件验证方法是什么preg NOT ereg因为它是已弃用 删除 I don t需要检查该网站是否存在 这不像最高安全性 我找到了很多方法ereg但它们 显然 不是好的做法 我建议你使用F
  • PHP 中的静态类初始值设定项

    我有一个带有一些静态函数的辅助类 类中的所有函数都需要一个 重 初始化函数来运行一次 就好像它是一个构造函数 有实现这一目标的良好实践吗 我唯一想到的就是打电话init函数 如果它已经运行过一次 使用静态 initialized变种 问题是
  • CryptoJS 使用密码加密 AES,但 PHP 解密需要密钥

    我在用CryptoJS https code google com p crypto js AES加密字符串 function doHash msg msg String msg var passphrase aggourakia var
  • 错误 #520009 - 帐户受到限制

    我收到 520009 错误 帐户 电子邮件受保护 cdn cgi l email protection被限制 当尝试进行并行付款时 我的代码使用沙箱运行良好 但我切换到实时端点 它开始失败 有问题的帐户是有效的 PayPal 帐户 我使用的
  • 为什么 asort 适用于多维数组?

    抱歉 如果这是一个非常基本的问题 我无意中发现asort http php net manual en function asort php似乎适用于多维数组 示例 PHP animals array 1 gt array name gt
  • 将 Cloudinary 与 spatie/media-library Laravel 包一起使用

    有人使用 Laravel 包 spatie media library 和 Cloudinary 吗 我认为用 Flysystem 来实现它是微不足道的 我实际上使用 Cloudinary 作为带有 silvanite nova field
  • Laravel,控制器中的 Auth::user()

    Laravel 框架 为什么我无法在 laravel 项目的控制器中使用 Auth user 查看用户是否已登录 Session 是否未连接到控制器 HomeController php public function isauthoriz
  • PHP Json_encode 将空格更改为加号 +

    我有一个网络应用程序 我首先将 JSON 数据存储在 cookie 中 然后每 x 秒保存到数据库 它只是打开与服务器的连接 服务器读取 cookie 它实际上并不通过 POST 或 GET 发送任何内容 当我保存到 cookie 时 我的
  • PHP date() 和 strtotime() 返回错误的月份 31 日

    我在用着date and strtotime 函数在下拉列表中显示接下来的 3 个月 PHP代码 echo date m Y strtotime 0 months echo date m Y strtotime 1 months echo
  • Mysql加密/存储敏感数据,

    我的 PHP 网站有以下内容 启用 SSL 饼干 session set cookie params cookieParams lifetime cookieParams path cookieParams domain secure ht

随机推荐

  • DeferredResult的使用场景及用法

    场景 假设我们现在要实现这样一个功能 浏览器要实时展示服务端计算出来的数据 一种可能的实现是 浏览器频繁 例如定时1秒 向服务端发起请求以获得服务端数据 但定时请求并不能 实时 反应服务端的数据变化情况 若定时周期为S 则数据延迟周期最大即
  • 小程序支付完整过程。足够详细!

    1 注册小程序 拿到App id 和 AppSecret 小程序密钥 取得商户的微信支付商户号 MCHID 和 微信支付密钥 APIKEY 2 流程 微信用户在微信端选商品下单 后台响应下单生成单号 产生第一次签名数据 提交微信统一支付接口
  • IDA工具介绍

    往期推荐 IDA工具安装 分享 ARM处理器寻址方式 ARM指令集 ARM汇编语言程序结构 昨天给大家概括性的了解了IDA工具 今天分享IDA工具的实际应用 一 IDA打开so文件 1 首先打开IDA工具 进入选项界面 直接选中Go选项 如
  • 初识 libcurl multi:实现一个 http 请求处理客户端,一个线程玩命发一个线程吐血收

    一 引言 最近在工作中 遇到了这么一个需求 我们希望拥有一个高性能的 http 请求处理客户端程序 这个客户端要求有这样的架构 它拥有两个线程 一个线程接收业务程序通过消息队列发来的批量的 http 请求信息 进行批量的 http 请求 另
  • 深入了解scratch中的“移动10步”和(你真的了解scratch吗?scratch初学者值得一看)

    scratch中的 移动10步 是scratch运动类积木中的第一个积木 也是大多数初学者使用scratch的时候用到的第一个积木命令 当我们运行 移动10步 积木时 小猫会向右移动10步 目测其实也就一点点距离 那么 移动10步 究竟在s
  • 正交多项式-勒让德多项式,两类切比雪夫多项式及零点,拉盖尔多项式,埃尔米特多项式

    1 正交多项式 设 n x 是 a
  • Linux 云服务器运维(操作及命令)

    1 什么是linux服务器load average Load是用来度量服务器工作量的大小 即计算机cpu任务执行队列的长度 值越大 表明包括正在运行和待运行的进程数越多 2 如何查看linux服务器负载 可以通过w top uptime p
  • Tomcat多实例部署

    文章目录 一 Tomcat多实例的操作步骤 1 关闭防火墙 将安装 Tomcat 所需软件包传到 opt目录下 2 安装JDK 3 安装 tomcat 4 配置 tomcat 环境变量 5 修改 tomcat2 中的 server xml
  • Qt设计模式与运行界面有偏差 Qt自适应高清屏

    原因Qt对高分辨率屏幕支持的问题 设置下属性 注意在应用程序实例之前设置 int main int argc char argv if QT VERSION gt QT VERSION CHECK 5 9 0 QApplication se
  • 安装NVIDIA CUDA失败最简单详细解决方法

    针对于这样的情况直接下载显卡驱动卸载工具 进入网站 点击下载 网页下拉 会出现如下图所示的内容 点击官方下载 下载软件 运行程序 下载完之后是一个压缩包的形式 解压缩 之后点击运行 如果不是最新版本会跳出如下弹出框 程序是否为最新版本没有影
  • 服务器怎么修改mac,服务器如何修改MAC地址

    服务器如何修改MAC地址 内容精选 换一换 如果要自定义裸金属服务器的DNS服务器信息 需要将裸金属服务器网络设置为静态IP 若将动态DHCP改为静态IP设置 IP和网关等网络信息必须和裸金属服务器下发时保持一致 否则可能会引起网络不通 以
  • Flask框架学习整理——从零开始入门Flask

    文章目录 Flask框架 一 简介 二 概要 三 知识点 附代码 1 Flask基础入门 1 路由route的创建 2 endpoint的作用 3 request对象的使用 4 请求钩子before after request 5 redi
  • Day6:浅谈useState

    目标 持续输出 每日分享关于web前端常见知识 面试题 性能优化 新技术等方面的内容 Day6 今日话题 谈谈react hooks中的useState 将从以下七个角度介绍 用法 参数 返回值 作用 工作原理 优缺点 注意点 用法 use
  • Map BSTMap映射代码(java)

    public interface Map
  • DDR3学习总结(一)

    简介 DDR3 SDRAM常 简称 DDR3 是当今较为常见的一种储存器 在计算机及嵌入式产品中得到广泛应用 特别是应用在涉及到大量数据交互的场合 比如电脑的内存条 对DDR3的读写操作大都借助IP核来完成 本次实验将采用 Xilinx公司
  • 报错 blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];ElasticSearch 报错

    报错 Caused by org elasticsearch cluster block ClusterBlockException blocked by FORBIDDEN 12 index read only allow delete
  • Kali Linux 从入门到精通(一)-概论

    Kali Linux 从入门到精通 一 概论 欢迎关注 https github com Wheeeeeeeeels 基本介绍 1 安全目标 先于攻击者发现和防止漏洞出现 攻击型安全 防护型安全 2 渗透测试 尝试挫败安全防御机制 发现系统
  • 好像还挺好玩的GAN重制版2——Keras搭建SRGAN平台进行图片超分辨率提升

    好像还挺好玩的GAN重制版2 Keras搭建SRGAN平台进行图片超分辨率提升 学习前言 源码下载地址 网络构建 一 什么是SRGAN 二 生成网络的构建 三 判别网络的构建 训练思路 一 判别器的训练 二 生成器的训练 利用SRGAN生成
  • Deep Learning(深度学习)之(三)Deep Learning的常用模型或者方法

    九 Deep Learning的常用模型或者方法 9 1 AutoEncoder自动编码器 Deep Learning最简单的一种方法是利用人工神经网络的特点 人工神经网络 ANN 本身就是具有层次结构的系统 如果给定一个神经网络 我们假设
  • 用单例模式封装实现一个数据库类

    使用单例模式的出发点 1 php的应用主要在于数据库应用 所以一个应用中会存在大量的数据库操作 使用单例模式 则可以避免大量的new 操作消耗的资源 2 如果系统中需要有一个类来全局控制某些配置信息 那么使用单例模式可以很方便的实现 这个可