一个类只有一个对象实例

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单例模式 使用场景和使用方法相关推荐

  1. Java单例模式详解--七种单例模式实现+单例安全+实际应用场景

    单例模式 保证了一个类只有一个实例,并且提供了一个全局访问点.单例模式的主要作用是节省公共资源,方便控制,避免多个实例造成的问题. 实现单例模式的三点: 私有构造函数 私有静态变量维护对象实例 公有静 ...

  2. Java23种设计模式之单例模式的五种实现方式、反射破解单例模式、不能破解枚举单例模式详解

    源码链接(Gitee码云):https://gitee.com/oldou/javadesignpatterns 这里有我整理好的Java23种设计模式的源码以及博客教程,博客教程中介绍了Java23 ...

  3. 什么是单例模式?为什么要用单例模式?实现的几种方式?

    Python 中的单例模式 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实 ...

  4. 搭建LoadRunner中的场景(三)场景的执行计划

    所谓场景操作,包括初始化用户组.启动用户组各用户以及停止虚拟用户的全过程.依据设置不同,执行过程中可以最多有5类操作,分别是启动用户组(start group).初始化(Initialize).启动虚 ...

  5. 设计模式---单例模式(多线程下的单例模式)

    1>单例类 package com.test.sigleton;public class SingletonTest {public static int num=0;//用于记录该类被实例化的 ...

  6. [vue] 分别说说vue能监听到数组或对象变化的场景,还有哪些场景是监听不到的?无法监听时有什么解决方案?

    [vue] 分别说说vue能监听到数组或对象变化的场景,还有哪些场景是监听不到的?无法监听时有什么解决方案? 无法监听时的方案: 数组:改变数组的值:this.$set() 改变数组长度:arr.sp ...

  7. 小说中场景的功能_场景在小说中的作用

    文 | 彼岸晓吾 / Part 01 写场景最厉害的作家有余华,莫言和村上. 初学写作者最容易犯的毛病是不会写场景,不了解场景的意义所在.很多写手以为,只要把自己的意思表达出来,自然会形成一篇文章或一 ...

  8. 在unity用shaderGraph做出类似动物之森的柱面场景,甚至球面场景。

    在unity用shaderGraph做出类似动物之森的柱状场景,甚至球状场景. 这个是模仿油管上NotSlot的视频https://www.youtube.com/watch?v=SOK3Ias5Nk ...

  9. 基于拉丁超立方抽样的风,光,负荷场景生成方法 风电功率场景生成 ,光伏功率场景生成,负荷场景生成

    基于拉丁超立方抽样的风,光,负荷场景生成方法 风电功率场景生成 ,光伏功率场景生成,负荷场景生成 通过后向场景削减BR得到典型场景及其概率 提供参考文献,完美复现! 语言:MATLAB ID:6430 ...

  10. Unity场景素材导出为 FBX文件的方法

    系列文章目录 一.Unity场景素材导出为 FBX文件的方法:http://t.csdn.cn/Xyjxe 二.Unity场景素材导出为 OBJ文件的方法:http://t.csdn.cn/08RY3 ...

最新文章

  1. 阿里发布图计算平台GraphScope,即将向全社会开源
  2. scala java funtion1_当我在ScalaIDE中运行代码时,为什么要获取`java.lang.NoClassDefFoundError:scala / Function1`?...
  3. Qt运行一个实例进程
  4. Css标题中图片居中,图片居中:任意图片在div里的上下垂直都居中!
  5. pfsense 2.2RC版本应用
  6. asp 开发app_ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式
  7. 深入理解CSS六种颜色模式
  8. 论文推荐|Mask TextSpotter:An End-to-End Trainable Neural Network
  9. 【转】XSD (xml Schema Definition)
  10. 基于人脸识别的课堂签到管理系统(四)---摄像头上传实时数据,百度AI读取并返回信息以及多线程操作
  11. django 之模板层
  12. 读书笔记-《程序员成长课》
  13. 云计算实训总结_云计算·实训报告书
  14. Redis数据结构之hash对象
  15. 如何快速获得城市道路智慧照明服务认证
  16. 带你玩转Visual Studio
  17. win10系统崩溃怎么修复_系统崩溃!win10系统修复和数据恢复方法总结
  18. 嵌入式开发 SRAM SROM DRAM DROM DDR NAND FLASH EMMC 区别
  19. Spring Boot Redis关闭
  20. 图形聚类算法:MCL

热门文章

  1. 电脑显示屏幕突然变成黑白色?
  2. 报时功能_聆听时间之韵——百达翡丽推出全新大自鸣功能报时腕表
  3. 分布式 PostgreSQL 集群(Citus)官方教程 - 迁移现有应用程序
  4. 深度学习像素级标签制作总结
  5. 智能家居技术冲击科技市场?为什么智能家居越来越受关注?
  6. 面试宝典 | 不完全总结
  7. Excel基础-求和、3个最低值
  8. YOLOX模型部署Android端-NCNN方法
  9. count(*)、count(1)、count(字段)的区别
  10. torch.split()