单例模式:即一个类只被实例化一次,当其他人对其再次实例化时,便返回第一次实例化的对象。这种模式可以极大地节约资源。典型应用于数据库类的实例化。

以实例化一个Mysql数据库类为例:

要实现一个类只实例化一次,就必须堵住其他实例化的入口。

1.实例化类时,会自动调用类的构造方法,因为将构造方法设置为private属性,限制为只能在类内部实例化

private function __construct(){

}

2.定义一个静态方法,在类内部实例化对象。实例化前先判断该类是否已被实例化了,若已被实例化,就返回该实例化对象;若没被实例化,便实例化一个对象并将该对象保存在类的静态属性中

private static $self = null;

public static function create(){

if (self::$self === null) {

self::$self = new self();

}

return self::$self;

}

3.禁止克隆,对象之间进行克隆可生成不同的对象。而克隆时会自动调用类的__conle方法,因此将克隆方法设置为private属性

private function __clone(){

}

综上,三私一公(三个私有属性和一个公共方法)单例模式的代码如下:

class Mysql {

private static $self = null;

public static function create(){

if (self::$self === null) {

self::$self = new self();

}

return self::$self;

}

private function __construct(){

}

private function __clone(){

}

}

$a = Mysql::create();

$b = Mysql::create();

/*判断两个类是否为同一个类*/

echo $a===$b ? 1 : 0;

php清空单例属性_PHP单例模式--典型的三私一公相关推荐

  1. Unity3D C# 单例属性和单例模板及优缺点

    1.什么是单例模式 相信我们都遇到过这样的问题: 我们使用new创建对象,这个对象需要全局共享只用这一个 我们需要用一种简单的方式全局能访问一个类创建的唯一对象 总结下来,我们经常需要创建一个类的单例 ...

  2. Spring单例Bean与单例模式的区别

    Spring单例Bean与单例模式的区别在于它们关联的环境不一样,单例模式是指在一个JVM进程中仅有一个实例,而Spring单例是指一个Spring Bean容器(ApplicationContext ...

  3. PHP设计模式:工厂(静态方法里调用newobj的方法)单例(三私一公newself)注册树(使用静态变量数组存取对象)适配器(主体建立接口适配器丰富方法)

    工厂:使用工厂类的静态方法新建需要的对象 然后在外面直接调用静态方法新建对象 <?php//要创建对象实例的类 class MyObject{} //工厂类 class MyFactory{pu ...

  4. PHP单例模式--三私一公

    PHP设计模式之一,单例模式,顾名思义就是只有一个实例.单例模式确保某一个类只有一个实例,不能重复实例,只能它自己实例化,而且向整个系统提供这个实例. 三私一公:私有化静态属性,私有化构造方法,私有化 ...

  5. PHP中单例模式:三私一公是什么?

    PHP中单例模式:三私一公是什么? 三私一公 私有化静态属性 私有化构造方法 私有化克隆方法 公有化静态方法 ​​​​ 转载于:https://www.cnblogs.com/phpisfirst/p ...

  6. 浅谈PHP单例模式 三私一公

    浅谈PHP单例模式 三私一公 1 单利模式保证属性私有化 构造函数私有化防止外部直接使用 克隆方法私有化防止克隆 2 一个对外的公共静态方法 供外部使用 这种模式保证本类只能被实例化一次,再次被调用时 ...

  7. python 模块 多线程 单例_python的单例模式

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

  8. java单例方法_Java单例模式

    单例模式,是特别常见的一种设计模式,因此我们有必要对它的概念和几种常见的写法非常了解,而且这也是面试中常问的知识点. 所谓单例模式,就是所有的请求都用一个对象来处理,如我们常用的Spring默认就是单 ...

  9. java设计模式 单例_java设计模式--单例模式

    单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点. 核心知识点如下: (1) 将采用单例 ...

最新文章

  1. 进程间数据传递:Queue,Pipe 进程间数据共享:Manager
  2. 感冒了,头晕晕沉沉的,什么时候能好啊!
  3. java的imshow方法_imshow窗口是截止的
  4. python开发Day05(计算器代码)
  5. 使用神经网络进行稀疏采样_使用python+opencv进行神经网络迁移
  6. 算法训练营 重编码_您在编码训练营期间可能面临的最大挑战
  7. c语言第六次实验报告,第一年C语言实验报告6列
  8. python 取整_马克的Python学习笔记#数字,日期和时间
  9. 数据可视化:常用图表使用总结
  10. Servlet传递数据方式
  11. java之yield(),sleep(),wait()区别详解-备忘笔记
  12. JQ实现单击按钮 倒计时获取验证码
  13. [原创]Tsys 2.0 beta 官方版无法使用自定义SQ
  14. CSS3 鲜为人知的属性-webkit-tap-highlight-color的理解
  15. (1)基于zigbee协议栈开发——串口通信
  16. AH快递单打印管理软件
  17. python 表格处理项目该如何分工_python 处理 Excel 表格
  18. salesforce与微信集成(一)-- 如何配置微信和salesforce
  19. 跨考计算机复试自我介绍,跨考生复试自我介绍
  20. GitModel数学建模 —— 动手学数理统计

热门文章

  1. 效果奇特的HTML5动画,12个效果奇特的HTML5动画赏析
  2. 递归、搜索、贪心、动态规划的区别
  3. java炫酷龙卷风源码_Java-使用二叉树实现快速排序-遁地龙卷风
  4. form表单提交按钮点击事件先触发还是提交数据先触发_如何实现图片上传并保存到数据库?...
  5. java 回溯_java 实现迷宫回溯算法示例详解
  6. 字段不显示 继承_Springboot Shiro页面按钮显示、路径越权访问题
  7. PDE2 three fundamental examples
  8. 基于深度卷积神经网络的大豆叶斑病识别
  9. 【matlab】将几幅图片放到一个画布中
  10. mysql centos6_Linux下的Mysql的基本操作(CentOS6.6)