PHP单例模式,就是一个对象只被生成一次,但该对象可以被其它众多对象使用。单例模式使用最多的场景,是数据库连接操作。我们知道,生成一个对象的操作是用new函数来实现,但是new对象都会消耗内存,而且有时候对同一个对象,在不同文件中可能会生成多次,这就造成了系统资源的浪费。然而使用单例模式,则可以很好的避免这种情况。

以数据库为例,假设我们有一个数据库的类,要实现数据库连接。如果不使用单例模式,那么在很多PHP文件中,我们可能到要创建这样的一个连接,这其实是对资源的很大浪费。那么下面介绍单例模式实现方法:

实例

class Database

{

//定义一个属性,该属性是静态的保护或私有属性

protected static $db;

//这里构造函数一定要是私有方法

private function __construct()

{

}

//声明一个获取类实例的方法

static function getInstace()

{

if(self::$db) {

return self::$db;

}else {

//生成自己

self::$db = new self();

return self::$db;

}

}

}

//错误调用方法

//用new实例化private标记构造函数的类会报错

$db = new Database();

//正确获取实例方法

$db = Database::getInstace();

运行实例 »

点击 "运行实例" 按钮查看在线实例

使用单例模式的好处是,当你在其他地方也要使用到这个类,比如上面的数据库类。那么你可以在其它地方直接调用 Database::getInstace(),而且该实例只会被生成一次,不会被重复生成,所以不会浪费系统资源。

简单的说,单例模式生成的实例只被生成一次,而且只负责一个特定的任务。

使用单例模式有下面几个要求:

1.构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;

2.拥有一个保存类的实例的静态成员变量;

3.拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化);

4.如果严谨的话,还需要创建__clone()方法防止对象被复制(克隆)。(我上面没创建)

使用单例模式好处,总结:

1、php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。

2、如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看ZF的FrontController部分。

3、在一次页面请求中, 便于进行调试。

参考:http://coderschool.cn/1523.html

php单例是什么意思,什么是PHP单例模式?相关推荐

  1. socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》

    Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...

  2. 单例销毁_【PHP设计模式】单例模式

    前言 设计模式是我们开发过程中的重中之重,所以今天小编就来学习设计模式中的单例模式. 单例模式 <?phpclass Singleton { /*** 定义一个静态变量保存已经实例化的对象* * ...

  3. python3单例-python3如何运行文件夹python单例模式

    单例模式是一种常用的软件设计模式. 在单例模式的核心结构中,只包含一个被称为单例类的特殊类. 通过单例模式可以保证系统中一个类只有一个实例,而且这个实例可以轻易被外界访问,方便控制实例对象的个数以节约 ...

  4. android 单例销毁,【设计模式与Android】单例模式——独一无二的皇帝

    什么是单例模式 所谓单例模式,就是确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例的设计模式.单例模式是最简单的设计模式,也是应用最广的设计模式.一般用于避免产生多个对象消耗过多的资源 ...

  5. java 反射 单例类_利用反射机制破坏单例模式

    简介 利用反射机制破坏了单例模式,这里以懒汉单例模式为例子进行操作. 之前利用反射也是改变了类中的private变量. 类中的private变量真的private么? 正常的单例模式的实现 这里采用了 ...

  6. python编程入门单例_常见的在Python中实现单例模式的三种方法

    单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在 ...

  7. 【Kotlin】Kotlin 单例 ( 懒汉式 与 恶汉式 | Java 单例 | Kotlin 单例 | 对象声明 | 伴生对象 | get 方法 | ? 与 !! 判空 )

    文章目录 I . 单例的懒汉式与恶汉式 II . Java 中的懒汉式与恶汉式 III . Kotlin 中对应 Java 的懒汉式与恶汉式 IV . Kotlin 对象 ( object ) 声明 ...

  8. Java 单例设计模式

    Singleton:单例模式 1.在整个应用程序中,一个类只有一个实例对象 2.这个实例对象只能通过本类中创建=====>私有化构造 3.别人还得使用,通过本类中创建的一个对外访问的接口,来返回 ...

  9. 笔记:Java中的单例设计模式

    之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类 ...

最新文章

  1. mysql duplicate jpa_SpringBoot Jpa 双数据源mysql + oracle + liquibase+参考源码
  2. java中两个map的融合(两个map有相同字段)
  3. python glob用法_glob模块使用教程
  4. 查看mysql所有命令
  5. Nginx源码分析 - HTTP模块篇 - TCP连接建立过程(21)
  6. j2ee,ajax中文乱码解决方法。。
  7. DB9串口定义及含义(全)
  8. 小黑计算机一级题库,小黑课堂计算机一级题库
  9. kitti数据集介绍和使用--待整理
  10. 中控指纹仪linux驱动下载,中控uru4500指纹仪驱动
  11. python3 中 sort 方法与 sorted 函数的使用
  12. play framework自定义插件plugin
  13. iOS开发常用设计模式
  14. sourcetree(mac)设置代理链接GitHub
  15. 解剖学坐标体系(LPS , RAS和LAS)
  16. 大数据架构Spark 进阶
  17. java书写开头,JAVA代码书写规范汇总详解
  18. 软考备战:软考中级课程+参考资料
  19. Python是个啥?为啥大家都在学?
  20. Win10系统复制文件后电脑卡死不能操作怎么办?

热门文章

  1. android开发常用的ADB命令
  2. 数据结构 C 代码 6.2: 哈夫曼树 (学生提供代码)
  3. 快递物流管理系统的设计与实现(SSM,MySQL)
  4. C语言-复制特定的字符串
  5. 6D姿态估计算法汇总
  6. Linux中suid提权
  7. ChatGPT入门案例|商务智能对话客服(二)
  8. 编写高质量的代码—从命名入手(命名…
  9. 联想a366t 刷android4,联想A366t线刷刷机教程(刷官方rom)
  10. 学会Zynq(28)SPI控制器简介