PHP设计模式之单例模式原理与实现方法分析


Posted in PHP onApril 25, 2018

本文实例讲述了PHP设计模式之单例模式原理与实现方法。分享给大家供大家参考,具体如下:

一、什么是单例模式

作为对象的创建模式,单例模式确保某一个类只有一个实例,并且对外提供这个全局实例的访问入口。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

二、PHP单例模式三要素

1. 需要一个保存类的唯一实例的静态成员变量。

2. 构造函数和克隆函数必须声明为私有的,防止外部程序创建或复制实例副本。

3. 必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用。

三、为什么使用单例模式

使用单例模式的好处很大,以数据库操作为例。若不采用单例模式,当程序中出现大量数据库操作时,每次都要执行new操作,每次都会消耗大量的内存资源和系统资源,而且每次打开和关闭数据库连接都是对数据库的一种极大考验和浪费。使用了单例模式,只需要实例化一次,不需要每次都执行new操作,极大降低了资源的耗费。

四、单例模式示例

这里以数据库操作为例

<?php
/**
*  单例模式
**/
class Db
{
  //保存全局实例
  private static $instance;
  //数据库连接句柄
  private $db;
  //数据库连接参数
  const HOSTNAME = "127.0.0.1";
  const USERNAME = "root";
  const PASSWORD = "root";
  const DBNAME = "testdb";
  //私有化构造函数,防止外界实例化对象
  private function __construct()
  {
    $this->db = mysqli_connect(self::HOSTNAME,self::USERNAME,
      self::PASSWORD,self::DBNAME);
  }
  //私有化克隆函数,防止外界克隆对象
  private function __clone()
  {
  }
  //单例访问统一入口
  public static function getInstance()
  {
    if(!(self::$instance instanceof self))
    {
      self::$instance = new self();
    }
    return self::$instance;
  }
  //数据库查询操作
  public function getinfo()
  {
    $sql = "select * from testtb";
    $res = mysqli_query($this->db,$sql);
    while($row = mysqli_fetch_array($res)) {
      echo $row['testcol'] . '<br />';
    }
    mysqli_free_result($res);
  }
}
$mysqli = Db::getInstance();
$mysqli->getinfo();
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
透析PHP的配置文件php.ini
Oct 09 PHP
基于mysql的论坛(3)
Oct 09 PHP
PHP语法速查表
Dec 06 PHP
使用php实现快钱支付功能(涉及到接口)
Jul 01 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
php采集中国代理服务器网的方法
Jun 16 PHP
PHP单链表的实现代码
Jul 05 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 PHP
Yii2基于Ajax自动获取表单数据的方法
Aug 10 PHP
PHP合并数组函数array_merge用法分析
Feb 17 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 #PHP
原生php实现excel文件读写的方法分析
Apr 25 #PHP
PHP操作Redis常用技巧总结
Apr 24 #PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 #PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 #PHP
php接口实现拖拽排序功能
Apr 23 #PHP
PHP基于SPL实现的迭代器模式示例
Apr 22 #PHP
You might like
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
php 常用类汇总 推荐收藏
2010/05/13 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
laravel安装和配置教程
2014/10/29 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
微信小程序 用户数据解密详细介绍
2017/01/09 Javascript
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
python实现分页效果
2017/10/25 Python
python3访问字典里的值实例方法
2020/11/18 Python
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
请解释流与文件有什么不同
2016/07/29 面试题
运动会致辞稿50字
2014/02/04 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
安全生产责任书范本
2014/04/15 职场文书
防沙治沙典型材料
2014/05/07 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle