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字符串截取问题
Nov 28 PHP
解决MySQL中文输出变成问号的问题
Jun 05 PHP
用php过滤危险html代码的函数
Jul 22 PHP
PHP网站基础优化方法小结
Sep 29 PHP
ajax 的post方法实例(带循环)
Jul 04 PHP
PHP中其实也可以用方法链
Nov 10 PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
Mar 08 PHP
ThinkPHP中session函数详解
Sep 14 PHP
PHP7新增运算符用法实例分析
Sep 26 PHP
php使用curl实现简单模拟提交表单功能
May 15 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
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
2019/04/08 PHP
javascript parseInt 大改造
2009/09/27 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
python实现识别相似图片小结
2016/02/22 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
巴西女装购物网站:Eclectic
2018/04/24 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
团支书的期末学习总结自我评价
2013/11/01 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
幼儿园美术教学反思
2014/01/31 职场文书
共产党员承诺书
2014/03/25 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
幼儿园园长个人总结
2015/03/02 职场文书
2015年党小组工作总结
2015/05/26 职场文书
清洁工工作总结
2015/08/11 职场文书