一个类只有一个对象实例

1、含义

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。相关学习推荐:PHP编程从入门到精通

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. 单例设计模式 序列化破坏单例模式原理解析及解决方案?

    单例设计模式 序列化破坏单例模式原理解析及解决方案? 序列化和反序列化 反射的破坏

  2. 单例设计模式-序列化破坏单例模式原理解析及解决方案

    越来越成熟了,那是不是坚不可摧的呢,现在我们就要用序列号和反序列化来破坏单例模式,后面也会重点讲一下原理,好好听,让我们来一起破坏单例模式吧,首先还是来到Test类里边 package com.lea ...

  3. java单例弊端,博客大牛总结的Java单例写法的优缺点及使用场景

    在java中,单例有很多种写法,面试时,手写代码环节,除了写算法题,有时候也会让手写单例模式,这里记录一下单例的几种写法和优缺点. 为什么使用单例 1.在内存中只有一个对象,节省内存空间.避免频繁的创 ...

  4. java spring 单例_spring怎么实现单例模式?

    在Spring中,bean可以被定义为两种模式:prototype(多例)和singleton(单例) singleton(单例):只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实 ...

  5. python单例类命名_单例模式(java/python/c++)

    序 最近接触到新项目,后端基于java开发.对于有c++/python开发经验,无java经验的小梅同学,开始了漫漫学习之旅,第一篇学习记录,从最简单的单例模式开始吧. 众所周知,单例模式的最明显的几 ...

  6. java 单例 生命周期_单例模式--- 声明周期托管方式

    声明周期托管方式,IOC JAVA代码 MyManager.java import java.util.HashMap; /** * 为了管理对象的产生 * 对象的控制权给当前类负责 * 生命周期托管 ...

  7. java枚举来实现单例_枚举实现单例模式

    Java中的枚举和其它语言不同,它是一个对象.早期的 Java 是没有枚举类型的大家都用类似于单例的方式来实现枚举,简单的说就是让构造 private 化,在 static 块中产生多个 final ...

  8. java connection 单例_Java设计模式之单例模式详解

    Java设计模式之单例模式详解 什么是设计模式 设计模式是在大量的实践中总结和理论之后优选的代码结构,编程风格,以及解决问题的思考方式.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可 ...

  9. php 单例 重连,PHP单例模式详解

    模式对于OOP开发人员尤其有用,因为他有助于创建稳定的API,并且仍然保持一定的灵活度.一种模式可以帮助我们定义一个负责完成特定任务的对象,还可以允许我们彻底修改掉某个类而不用修改与这些类打交道的代码 ...

最新文章

  1. python server酱_面向回家编程!GitHub标星两万的quot;Python抢票神器”快用起来!...
  2. tank html5,index.html
  3. CSharpGL(42)借助帧缓存实现渲染到纹理(RenderToTexture)
  4. 车载wince系统刷界面ui_2020年值得关注的10个UI设计趋势!
  5. yii beforeaction 如何赋值全局变量_前端如何进行用户权限管理
  6. 《AI算法工程师手册》读书笔记(1)
  7. 【pytorch】深度学习提速之自动混合精度
  8. 审车按月还是日期_车辆年检年审时间,看月份还是看日期
  9. Inception-V3论文翻译——中英文对照
  10. Linux ffs()函数
  11. 物联网通信技术|课堂笔记|week8|网络安全学习|加密逻辑|加密算法
  12. 移动端上传头像-相册、拍摄-旋转
  13. win7“找不到该项目”的错误原因及解决方法
  14. 一元域名真假?一元域名注册有哪些风险?
  15. 室内设计优美语句_关于装修设计的唯美句子
  16. 全国地名点地统计模式分析
  17. SQL知识点小结(嵌套查询)
  18. UA OPTI501 电磁波6 麦克斯韦方程组及其不同形式
  19. Unity游戏开发完整项目,全套代码+资源
  20. JavaScript调用cs中带参数的函数

热门文章

  1. 如果要卸载office2003可以通过二种方法来解决
  2. Fedora17硬盘安装
  3. (附源码)计算机毕业设计SSM余庆金阳驾校管理系统
  4. 【LeetCode】【esay】【69】x的平方
  5. 吾尝终日而思矣——2019.02.19
  6. 【案例3-3】查看手机配置与功能
  7. Power BI盈亏平衡分析-优化
  8. 给我写一个维吾尔文音节切分js方法
  9. 【开源飞控】匿名飞控TI版解析(1)
  10. 腾讯御安全加固保护简单分析