理解php单例模式

单例作为一个最经典的设计模式之一,到底什么是单例?为什么要用单例?怎么设计单例?php中单例如何具体实现?

一、什么是单例

wiki百科:单例模式,也叫单子模式,是一种常用的软件设计模式。 在应用这个模式时,单例对象的类必须保证只有一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。

通俗的说,也就是对于某一个功能只能实例化一个对象

二、为什么用单例

实际项目中像数据库查询,日志输出,全局回调,统一校验等模块。这些模块功能单一,但需要多次访问,如果能够全局唯一,多次复用会大大提升性能。这也就是单例存在的必要性。

单例模式的好处:

  • 1:减少频繁创建,节省了cpu。
  • 2:静态对象公用,节省了内存。
  • 3:功能解耦,代码已维护。

三、如何设计单例

通过上面的描述,单例的核心是,实例一次生成,全局唯一,多次调用。因此在单例模式必须包含三要素:

  • 1:私有化构造函数,私有化clone。也就是不能new,不能clone。【唯一】
  • 2:拥有一个静态变量,用于保存当前的类。【唯一如何保存】
  • 3:提供一个公共的访问入口。【可以访问】

四、php实现

php 实现的单例模式

<?php

class XiaozhuaiSingleton
{
    // 私有化构造方法
    private function __construct()
    {

    }

    // 私有化clone方法
    private function __clone()
    {

    }

    // 保存实例的静态对象
    public static $singleInstance;

    /**
     * 声明静态调用方法
     * 目的:保证该方法的调用全局唯一
     *
     * @return XiaozhuaiSingleton
     */
    public static function getInstance()
    {
        if (!self::$singleInstance) {
            self::$singleInstance = new self();
        }

        return self::$singleInstance;
    }

    // 调用单例的方法
    public function singletonFunc()
    {
        echo "call single ton method";
    }

}

$singleInstance = XiaozhuaiSingleton::getInstance();
$singleInstance->singletonFunc();

$singleInstance2 = XiaozhuaiSingleton::getInstance();
$singleInstance2->singletonFunc();

// 校验是否是一个实例
var_dump($singleInstance === $singleInstance2);  // true ,一个对象

【转载请注明:理解php单例模式 | 靠谱崔小拽 】

原文地址:https://www.cnblogs.com/huhewei/p/12628890.html

时间: 2024-08-03 10:19:51

理解php单例模式的相关文章

个人理解的单例模式

下面是个人理解的单例模式: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication6 { public sealed class Singleton { static Singleton instance; /// <summary> /// 为了避免实例不唯一,构造方法私有化 /// </summary> p

javascript活动对象的理解——伪单例模式

在自己研究javascript各种设计模式的过程中,偶然写出的一段代码让自己理解的更深刻了,之所以称之为伪单例模式,是因为这段代码造成的结果很想单例模式,但是实际上是活动对象捣乱所造成的误会. 代码很简单是这样的: function Person(){ var money = 0; Person.prototype.getMoney = function (){ return money; } Person.prototype.addMoney = function (m){ money +=

C#设计模式(1)——单例模式

一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设计模式>,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深入地理解设计模式,二同时可以给一些初学设计模式的朋友一些参考.首先我介绍的是设计模式中比较简单的一个模式——单例模式(因为这里只牵涉到一个类) 二.单例模式的介绍 说到单例模式,大家第一反应应该就是——什么是单例模式?,从“单例”字面意思上理解为——一个类只有一个实例,所以单例模式也就是保证一个类只

C++ 单例模式的几种实现研究

都是从网上学得,整理下自己的理解. 单例模式有两种实现模式: 1)懒汉模式: 就是说当你第一次使用时才创建一个唯一的实例对象,从而实现延迟加载的效果. 2)饿汉模式: 就是说不管你将来用不用,程序启动时就创建一个唯一的实例对象. 所以,从实现手法上看,  懒汉模式是在第一次使用单例对象时才完成初始化工作.因为此时可能存在多线程竞态环境,如不加锁限制会导致重复构造或构造不完全问题. 饿汉模式则是利用外部变量,在进入程序入口函数之前就完成单例对象的初始化工作,此时是单线程所以不会存在多线程的竞态环境

&quot;围观&quot;设计模式(7)--创建型之单例模式(Singleton Pattern)

单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为.比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息.这种方式简化了在复杂环境下的配置管理.----维基百科(WIKIPEDIA) 个人的理解: 单例模式概念比较简单,他的目的就是只允许出现一个该类的实例,经常在JD

单例模式C#

首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了, 比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个, 这里就可以通过单例模式来避免两个打印作业同时输出到打印机中, 即在整个的打印过程中我只有一个打印程序的实例. 简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中, 任何一个时刻,单例类的实例都只存在一个(当然也可以不存在). 下面来看单例模式的结构图(图太简单了) image 从上面的类图中可以看出,在单例类中有一个构造

C# 单例模式(Singleton Pattern)

(新手写博客,主要是对自己学习的归纳总结.会对很多小细节详解.) 单例模式的定义: 确保一个类只有一个实例,并提供一个全局访问点. 首先实例大家应该都明白就是类生成对象的过程简单的就是String s=new String(),则s就是个实例. Q:如何只生成一个实例? A:1)首先必须将构造函数变为私有从而防止其他类实例化,并且只能有一个构造函数.因为系统会默认一个无参构造函数,而且默认public访问修饰符. 所以必须写一个私有无参让默认无效.(通常单例模式都是不带形参的) 2)在该类中声明

js单例模式

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点. 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.一个最好的办法就是,让类自身负责保存它的唯一实例.这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法. 为了帮助大家更好地理解单例模式,大家可以结合下面的类图来进行理解,以及后面也会剖析单例模式的实现思路: 下面就看看具体的实现代码(看完之后你会惊讶道:真是这样的!): /// <summary> /// 单例

小华的故事--单例模式

昨日,重新温习了一下工厂模式和单例模式. 并且重新认识了设计模式,在学校期间接触过设计模式. 但是,在那个时期,学设计模式只是单纯的学习理论知识而已. ps:顺便吐槽一下,上学期间学习的东西,大多数的情况会在未来的某个时间点完全遗忘掉. 最根本的原因在于,那个时期说学习的东西更偏重与理论,理论这种东西,只是潜移默化的告诉你“我知道这个”. 但是,当你真正开始用这个东西的时候发现无从下手.这也就造成了大学生找工作眼高手低的现象. (以上纯属个人观点) -----------------------