php 设计模式 - 单例

概述:

     作为对象的创建模式,单例确保某一个内在系统中只存在一个实例,它不可以创建副本。
克隆函数(__clone )以及构造函数(__construct )必须声明为私用, 防止外部程序 创建一个新类 ,而失去单例模式的意义。

PHP 语言是一种解释型的语言,在页面执行完成后,所有的相关资源都会被回收。PHP在语言级别上,不能像C#,JAVA编译型语言一样,没办法让某个对象长距内存。
然而在单一请求场景时,还是可以通过单例模式来共享对象,比如数据库连接对象。


class DbConnection
{private static $_instance;private static $token = 0;public static function  getInstance(){if (static::$_instance instanceof DbConnection) {return static::$_instance;}// 随机生产一个 token 标示当前内static::$token = rand(100, 1000);static::$_instance = new DbConnection();return static::$_instance;}// 克隆函数以及构造函数必须声明为私用,// 防止外部程序 创建一个新类 ,而失去单例模式的意义。private function  __clone(){}private function  __construct(){}public function  open(){echo "init times:" . static::$token . '<br/>';}}

  

单例与static 类的 比较:

   1、singleton 能够很好的保持对象的面相对象,比如静态工具类则可以使用 static。
2、单例可以实现自某接口,可以继承自某类。静态类也可以继承自某类,但是就没法使用父类里面的protect成员了。


转载于:https://www.cnblogs.com/rhythmK/p/5520271.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

prometheus python client

为什么80%的码农都做不了架构师&#xff1f;>>> 当我刚开始准备使用Python写一个promethues的client的时候&#xff0c;并没有想到过程这么麻烦。github上的大佬们也没兴趣帮我解决这些细节的问题。以下是我在使用prometheus_client遇到的一些问题&#xff0c;仅供…

php之无限极分类

http://blog.csdn.net/kankan231/article/details/8462349/转载于:https://www.cnblogs.com/jeremyjs/p/4798169.html

【遥感数字图像处理】实验:遥感影像分类(监督、非监督分类)完整流程(Erdas版)

一.实验目的: 理解计算机图像分类的基本原理,掌握数字图像非监督分类以及监督分类的具体方法和过程,以及两种分类方法的区别。 二.实验平台:ERDAS IMAGINE 9.1 三.实验要求:掌握非监督分类;非监督分类结果评价;监督分类;监督分类结果评价;分类后处理。 四.实验…

mysql5.7.16安装版_mysql数据库5.7.16安装版怎么安装图解

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

重大跨越!Windows 11 23H2 25115 推送:2023 年更新测试开启,水印回归

面向 Dev 频道的 Windows 预览体验成员&#xff0c;微软现已发布 Windows 11 预览版 Build 25115。主要变化1.微软宣布从 Dev 频道切换到 Beta 频道的选项正式关闭&#xff0c;Beta 频道将继续测试 Windows 11 版本 22H2&#xff0c;而 Dev 频道将开启 2023 年更新 Windows 11 …

团队第二次冲刺第三天

已经明白自己犯错误的地方&#xff0c;经过今天的改正&#xff0c;成功调用数据库储存用户名和密码。 明天对于数据库更加完善。转载于:https://www.cnblogs.com/dotacai/p/5521506.html

Android Studio编译提示如下attribute layout_constraintBottom_toBottomOf (aka com.luck.pictureselector:layou

1 问题 Android Studio编译提示错误如下 AAPT: error: attribute layout_constraintBottom_toBottomOf (aka com.luck.pictureselector:layout_constraintBottom_toBottomOf) not found.2 解决办法 在app的build.gradle文件里面添加依赖如下 implementation androidx.const…

《零基础看得懂的C++入门教程 》——(4)条件判断原来如此

一、学习目标 了解什么是条件判断了解多个条件判断了解输入了解什么是逻辑与、逻辑或 目录 预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《软件介绍》 想了解编译原理和学习方法点这篇&#xff0c;学…

Django学习笔记(4)

为什么80%的码农都做不了架构师&#xff1f;>>> 首先提一个问题&#xff1a;在Django中如何处理CRSF(Cross-site request forgery)? 先看一下CSRF原理。 其实就是恶意网站利用正常网站的cookie去非法请求。 ##Java处理方式## 一般做法需要后台和前端配合采取策略去…

MySQL复制--slave设置读取binlog的位置

change_master->global_init_info->Master_info::mi_init_info->Rpl_info_handler::init_info->Rpl_info_file::do_init_info ->mi->rli->rli_init_info()->初始化./relay-bin.000001,4如果relay-log.info不存在的话&#xff0c;否则读取//初始化mas…

【遥感数字图像处理】实验:遥感专题地图制作经典流程(Erdas版)

实验目的:掌握计算机辅助下遥感专题地图的制作。实验平台:ERDAS 9.1实验要求:掌握专题地图的编辑;制图文件路径的编辑;系列地图编辑工具的使用。实验步骤:1 专题地图的编辑 1.1 准备专题制图数据 (1) 在视窗菜单条中点击 File,选择Open (2) 点击 Raster Layer,打开S…

.NET版OCR紧随PP-OCRv3重磅发布

.net版OCR地址PaddleOCRSharp&#xff1a;https://gitee.com/raoyutian/paddle-ocrsharpPaddleOCRSharp是一个基于PaddleOCR的C代码修改并封装的.NET的工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能&#xff0c;同时针对小图识别不准的情况下&a…

mysql导出二进制日志_使用mysqlbinlog提取二进制日志

MySQL binlog日志记录了MySQL数据库从启用日志以来所有对当前数据库的变更。binlog日志属于二进制文件&#xff0c;我们可以从binlog提取出来生成可阅读的SQL语句来重建当前数据库以及根据需要实现时点恢复或不完全恢复。本文主要描述了如果提取binlog日志&#xff0c;并给出相…

《零基础看得懂的C++入门教程 》——(5) 容我套个娃 循环

一、学习目标 了解循环的使用方法 目录 预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《软件介绍》 想了解编译原理和学习方法点这篇&#xff0c;学习方法和一些原理C与C都是相同的《脱离学习误区》 …

Android之把app作为独立的module导入其他项目遇到的坑

1 问题 把app作为独立的module导入其他项目 2 步骤 1)在app的里面的build.gradle里面把 apply plugin: com.android.application 替换成如下 apply plugin: com.android.library 2)注视掉build.gradle文件里面的applicationId 3)app的AndroidManifest文件中MainActiv…

【ArcGIS风暴】ArcGIS解决数字化之前创建图层时未定义坐标系而导致数据跑偏的问题

数字化时,第一步需要创建点线面图层,创建图层需要指定一个地理坐标系,但如果忽略了这一步,我们数字化的适量数据时没有坐标系的,后果很严重,如果数字化工作只做了一点点,可以卷土重来;如果是大量工作的话,可以采取以下补救措施,建议收藏。 注: (1)如果底图为无任…

Android两个注意事项.深入了解Intent和IntentFilter(两)

深入理解Intent和IntentFiler(二)转载请表明出处&#xff1a;http://blog.csdn.net/u012637501(嵌入式_小J的天空) 在上一篇文章中&#xff0c;我们比較具体学习了"Intent"的相关知识&#xff0c;如今将学习怎样设置Intent对象的这些属性以及怎样使用他们来启动组件。…

Oracle常用sql语句(一)

Sql的分类DDL操作数据库表列等表基本的操作主键索引视图 常用数据类型字符串类型数字类型日期类型LOB类型LONG类型 数据转换character datenumbercharacter通用函数条件表达式Sql的分类 DDL &#xff08;Data Definition Language&#xff09;&#xff1a;数据定义语言&#xf…

ASP.NET Web API 实现客户端Basic(基本)认证 之简单实现

优点是逻辑简单明了、设置简单。 缺点显而易见&#xff0c;即使是BASE64后也是可见的明文&#xff0c;很容易被破解、非法利用&#xff0c;使用HTTPS是一个解决方案。 还有就是HTTP是无状态的&#xff0c;同一客户端每次都需要验证。 实现&#xff1a; 客户端在用户输入用户名及…

WPF|分享一个登录界面设计

分享一个登录界面&#xff0c;先看效果图&#xff1a;准备文中使用到了一些图标&#xff1a;我们可以从 iconfont[1]免费下载&#xff1a;代码简单说明请随手创建一个WPF项目&#xff08;.NET Framework、.NET 5\6\7皆可&#xff09;&#xff0c;使用tree /f命令看看最终的文件…