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实现框架(二)
Oct 09 PHP
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
Oct 21 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
php限制ip地址范围的方法
Mar 31 PHP
PHP微信开发之二维码生成类
Jun 26 PHP
PHP中Session可能会引起并发问题
Jun 26 PHP
php制作简单模版引擎
Apr 07 PHP
php双层循环(九九乘法表)
Oct 23 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 PHP
laravel框架邮箱认证实现方法详解
Nov 22 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 AJAX实例根据邮编自动完成地址信息
2008/11/23 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
vue+flask实现视频合成功能(拖拽上传)
2021/03/04 Vue.js
python list 合并连接字符串的方法
2013/03/09 Python
跟老齐学Python之一个免费的实验室
2014/09/14 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
Python简易版停车管理系统
2019/08/12 Python
python ETL工具 pyetl
2020/06/07 Python
python如何对链表操作
2020/10/10 Python
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
小区门卫岗位职责
2013/12/31 职场文书
工作建议书范文
2014/05/13 职场文书
小学教师师德整改措施
2014/09/29 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
史上最牛的辞职信
2015/02/28 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
埃及王子观后感
2015/06/16 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers