单例模式php应用场景,php单例模式 使用场景和使用方法
一个类只有一个对象实例
1、含义
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。
2、单例模式的三个要点:
(1). 需要一个保存类的唯一实例的静态成员变量:private static $_instance;
(2). 构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式的意义:private function __construct(){
$this->_db = pg_connect('xxxx');
}
private function __clone(){
}//覆盖__clone()方法,禁止克隆
(3). 必须提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用public static function getInstance(){
if(! (self::$_instance instanceof self) ){
self::$_instance = new self();
}
return self::$_instance;
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式是一种常见的设计模式,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例。
单例模式分3种:懒汉式单例、饿汉式单例、登记式单例。
单例模式有以下3个特点:
1.只能有一个实例。
2.必须自行创建这个实例。
3.必须给其他对象提供这一实例。
那么为什么要使用PHP单例模式?
PHP一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。class Single {
private $name;//声明一个私有的实例变量
private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
}
static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
if(!self::$instance) self::$instance = new self();
return self::$instance;
}
public function setname($n){ $this->name = $n; }
public function getname(){ return $this->name; }
}
$oa = Single::getinstance();
$ob = Single::getinstance();
$oa->setname('hello world');
$ob->setname('good morning');
echo $oa->getname();//good morning
echo $ob->getname();//good morning
单例模式php应用场景,php单例模式 使用场景和使用方法相关推荐
- Java单例模式详解--七种单例模式实现+单例安全+实际应用场景
单例模式 保证了一个类只有一个实例,并且提供了一个全局访问点.单例模式的主要作用是节省公共资源,方便控制,避免多个实例造成的问题. 实现单例模式的三点: 私有构造函数 私有静态变量维护对象实例 公有静 ...
- Java23种设计模式之单例模式的五种实现方式、反射破解单例模式、不能破解枚举单例模式详解
源码链接(Gitee码云):https://gitee.com/oldou/javadesignpatterns 这里有我整理好的Java23种设计模式的源码以及博客教程,博客教程中介绍了Java23 ...
- 什么是单例模式?为什么要用单例模式?实现的几种方式?
Python 中的单例模式 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实 ...
- 搭建LoadRunner中的场景(三)场景的执行计划
所谓场景操作,包括初始化用户组.启动用户组各用户以及停止虚拟用户的全过程.依据设置不同,执行过程中可以最多有5类操作,分别是启动用户组(start group).初始化(Initialize).启动虚 ...
- 设计模式---单例模式(多线程下的单例模式)
1>单例类 package com.test.sigleton;public class SingletonTest {public static int num=0;//用于记录该类被实例化的 ...
- [vue] 分别说说vue能监听到数组或对象变化的场景,还有哪些场景是监听不到的?无法监听时有什么解决方案?
[vue] 分别说说vue能监听到数组或对象变化的场景,还有哪些场景是监听不到的?无法监听时有什么解决方案? 无法监听时的方案: 数组:改变数组的值:this.$set() 改变数组长度:arr.sp ...
- 小说中场景的功能_场景在小说中的作用
文 | 彼岸晓吾 / Part 01 写场景最厉害的作家有余华,莫言和村上. 初学写作者最容易犯的毛病是不会写场景,不了解场景的意义所在.很多写手以为,只要把自己的意思表达出来,自然会形成一篇文章或一 ...
- 在unity用shaderGraph做出类似动物之森的柱面场景,甚至球面场景。
在unity用shaderGraph做出类似动物之森的柱状场景,甚至球状场景. 这个是模仿油管上NotSlot的视频https://www.youtube.com/watch?v=SOK3Ias5Nk ...
- 基于拉丁超立方抽样的风,光,负荷场景生成方法 风电功率场景生成 ,光伏功率场景生成,负荷场景生成
基于拉丁超立方抽样的风,光,负荷场景生成方法 风电功率场景生成 ,光伏功率场景生成,负荷场景生成 通过后向场景削减BR得到典型场景及其概率 提供参考文献,完美复现! 语言:MATLAB ID:6430 ...
- Unity场景素材导出为 FBX文件的方法
系列文章目录 一.Unity场景素材导出为 FBX文件的方法:http://t.csdn.cn/Xyjxe 二.Unity场景素材导出为 OBJ文件的方法:http://t.csdn.cn/08RY3 ...
最新文章
- 阿里发布图计算平台GraphScope,即将向全社会开源
- scala java funtion1_当我在ScalaIDE中运行代码时,为什么要获取`java.lang.NoClassDefFoundError:scala / Function1`?...
- Qt运行一个实例进程
- Css标题中图片居中,图片居中:任意图片在div里的上下垂直都居中!
- pfsense 2.2RC版本应用
- asp 开发app_ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式
- 深入理解CSS六种颜色模式
- 论文推荐|Mask TextSpotter:An End-to-End Trainable Neural Network
- 【转】XSD (xml Schema Definition)
- 基于人脸识别的课堂签到管理系统(四)---摄像头上传实时数据,百度AI读取并返回信息以及多线程操作
- django 之模板层
- 读书笔记-《程序员成长课》
- 云计算实训总结_云计算·实训报告书
- Redis数据结构之hash对象
- 如何快速获得城市道路智慧照明服务认证
- 带你玩转Visual Studio
- win10系统崩溃怎么修复_系统崩溃!win10系统修复和数据恢复方法总结
- 嵌入式开发 SRAM SROM DRAM DROM DDR NAND FLASH EMMC 区别
- Spring Boot Redis关闭
- 图形聚类算法:MCL
热门文章
- 电脑显示屏幕突然变成黑白色?
- 报时功能_聆听时间之韵——百达翡丽推出全新大自鸣功能报时腕表
- 分布式 PostgreSQL 集群(Citus)官方教程 - 迁移现有应用程序
- 深度学习像素级标签制作总结
- 智能家居技术冲击科技市场?为什么智能家居越来越受关注?
- 面试宝典 | 不完全总结
- Excel基础-求和、3个最低值
- YOLOX模型部署Android端-NCNN方法
- count(*)、count(1)、count(字段)的区别
- torch.split()