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 的几个配置文件函数
Dec 21 PHP
PHP 数组教程 定义数组
Oct 23 PHP
php Memcache 中实现消息队列
Nov 24 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
Jan 11 PHP
php一些错误处理的方法与技巧总结
Aug 10 PHP
浅析PHP中strlen和mb_strlen的区别
Aug 31 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
Jun 28 PHP
php反射类ReflectionClass用法分析
May 12 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
yii gridview实现时间段筛选功能
Aug 15 PHP
Yii2框架自定义验证规则操作示例
Feb 08 PHP
详解laravel passport OAuth2.0的4种模式
Nov 04 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日期处理函数 整型日期格式
2011/01/12 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
php pki加密技术(openssl)详解
2013/07/01 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
jQuery插件zepto.js简单实现tab切换
2015/06/16 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
移动端效果之Swiper详解
2017/10/09 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
Python3处理文件中每个词的方法
2015/05/22 Python
python psutil库安装教程
2018/03/19 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
Django models文件模型变更错误解决
2020/05/11 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
学生社团文化节开幕式主持词
2014/03/28 职场文书
银行求职自荐信
2014/06/30 职场文书
2019思想汇报范文
2019/05/21 职场文书