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&amp;&amp;mysql)一
Oct 09 PHP
php zlib压缩和解压缩swf文件的代码
Dec 30 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
Jul 02 PHP
PHP5各个版本的新功能和新特性总结
Mar 16 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 PHP
PHP has encountered a Stack overflow问题解决方法
Nov 03 PHP
php通过Chianz.com获取IP地址与地区的方法
Jan 14 PHP
curl和libcurl的区别简介
Jul 01 PHP
学习php设计模式 php实现状态模式
Dec 07 PHP
PHP浮点比较大小的方法
Feb 14 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 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遍历文件夹与子目录的函数代码
2011/09/26 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
PHP whois查询类定义与用法示例
2019/04/03 PHP
JavaScript中的细节分析
2012/06/30 Javascript
jquery的相对父元素和相对文档定位示例代码
2013/08/02 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
Node.js实现在目录中查找某个字符串及所在文件
2014/09/03 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
JS实现汉字与Unicode码相互转换的方法详解
2017/04/28 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
vue 权限认证token的实现方法
2018/07/17 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
Python多线程thread及模块使用实例
2020/04/28 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
巴西女装购物网站:Eclectic
2018/04/24 全球购物
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
彩色的非洲教学反思
2014/02/18 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
机关作风建设自查报告
2014/10/22 职场文书