PHP单例模式详解及实例代码


Posted in PHP onDecember 21, 2016

PHP单例模式详解

单例模式的概念

单例模式是指整个应用中某个类只有一个对象实例的设计模式。具体来说,作为对象的创建方式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局的提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

单例模式的特点

单例模式的主要特点是“三私一公”:

需要一个保存类的唯一实例的私有静态成员变量

构造函数必须声明为私有的,防止外部程序new一个对象从而失去单例的意义

克隆函数必须声明为私有的,防止对象被克隆

必须提供一个访问这个实例的公共静态方法(通常命名为getInstance),从而返回唯一实例的一个引用。

使用单例模式的原因及场景

在PHP的大多数应用中都会存在大量的数据库操作,如果不用单例模式,那每次都要new操作,但是每次new都会消耗大量的系统资源和内存资源,而且每次打开和关闭数据库都是对数据库的一种极大考验和浪费。所以单例模式经常用在数据库操作类中。

同样,如果系统中需要有一个类来全局控制某些配置信息,那使用单例模式可以很方便的实现。

PHP单例模式实现

下面是一个PHP单例模式实现数据库操作类的框架

<?php
 class Db{
 const DB_HOST='localhost';
 const DB_NAME='';
 const DB_USER='';
 const DB_PWD='';
 private $_db;
 //保存实例的私有静态变量
 private static $_instance;
 //构造函数和克隆函数都声明为私有的
 private function __construct(){
 //$this->_db=mysql_connect();
 }
 private function __clone(){
 //实现
 }
 //访问实例的公共静态方法
 public static function getInstance(){
 if(!(self::$_instance instanceof self)){
 self::$_instance=new self();
 }
 //或者
 if(self::$_instance===null){
 self::$_instance=new Db();
 }
 return self::$_instance;
 }
 public function fetchAll(){
 //实现
 }
 public function fetchRow(){
 //实现
 }
 }
 //类外部获取实例的引用
 $db=Db::getInstance();
?>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
PHP运行时强制显示出错信息的代码
Apr 20 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
在PHP上显示JFreechart画的统计图方法
Nov 03 PHP
thinkphp的c方法使用示例
Feb 24 PHP
PHP中Session引起的脚本阻塞问题解决办法
Apr 08 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
Yii安装与使用Excel扩展的方法
Jul 13 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
php语言注释,单行注释和多行注释
Jan 21 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 #PHP
PHP脚本自动识别验证码查询汽车违章
Dec 20 #PHP
php获取POST数据的三种方法实例详解
Dec 20 #PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
Dec 19 #PHP
Discuz论坛密码与密保加密规则
Dec 19 #PHP
yii框架搜索分页modle写法
Dec 19 #PHP
YII框架中搜索分页jQuery写法详解
Dec 19 #PHP
You might like
一些关于PHP的知识
2006/11/17 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
js判断文件格式及大小的简单实例(必看)
2016/10/11 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
Django中对数据查询结果进行排序的方法
2015/07/17 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
Python设计密码强度校验程序
2020/07/30 Python
Python字符串三种格式化输出
2020/09/17 Python
年会活动策划方案
2014/01/23 职场文书
大学毕业感言100字
2014/02/03 职场文书
运动会报道稿大全
2015/07/23 职场文书
小学课改工作总结
2015/08/13 职场文书