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扩展ZF――Validate扩展
Jan 10 PHP
php 缓存函数代码
Aug 27 PHP
php下关于Cannot use a scalar value as an array的解决办法
Aug 08 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
php中jQuery插件autocomplate的简单使用笔记
Jun 14 PHP
PHP中使用asort进行中文排序失效的问题处理
Aug 18 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
Mar 26 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
thinkPHP3.1验证码的简单实现方法
Apr 22 PHP
解决Laravel自定义类引入和命名空间的问题
Oct 15 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 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编码规范-php coding standard
2007/03/16 PHP
组合算法的PHP解答方法
2012/02/04 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
2016/05/23 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
Python 查找字符在字符串中的位置实例
2018/05/02 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
临床医学专业学生的自我评价分享
2013/11/21 职场文书
运动会广播稿150字
2014/02/19 职场文书
工程售后服务承诺书
2014/05/21 职场文书
索赔员岗位职责
2015/02/15 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang