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编程标准
Dec 17 PHP
如何隐藏你的.php文件
Jan 04 PHP
php adodb连接mssql解决乱码问题
Jun 12 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
Apr 25 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
php计算两个坐标(经度,纬度)之间距离的方法
Apr 17 PHP
PHP使用MPDF类生成PDF的方法
Dec 08 PHP
PHP和MYSQL实现分页导航思路详解
Apr 11 PHP
浅析PHP数据导出知识点
Feb 17 PHP
PHP如何解决微信文章图片防盗链
Dec 09 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
APMServ使用说明
2006/10/23 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
jquery代码实现简单的随机图片瀑布流效果
2015/04/20 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
js利用iframe实现选项卡效果
2020/08/09 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
Python实现八大排序算法
2016/08/13 Python
如何用Python合并lmdb文件
2018/07/02 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
人民调解员培训方案
2014/06/05 职场文书
北京英文导游词
2015/02/12 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
Oracle中update和select 关联操作
2022/01/18 Oracle
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android