您的当前位置:首页>全部文章>文章详情

【PHP】php单利设计模式有哪些

CrazyPanda发表于:2023-12-06 19:39:23浏览:464次TAG:

php单利设计模式有:1、饿汉式单例模式,指在类加载时就创建一个实例,然后直接返回该实例;2、懒汉式单例模式,在第一次调用获取实例的方法时才创建一个实例,实现延迟加载;3、双重检查锁定单例模式,在懒汉式单例模式的基础上,通过加锁来保证线程安全,实现了延迟加载和线程安全;4、使用静态变量的单例模式,将实例保存在静态变量中,并提供一个静态方法来获取该实例,实现简单线程安全。

2023091814154848634.jpg

本文的操作环境:Windows10系统、PHP8.1.3版本、Dell G3电脑。

PHP单例设计模式是一种常用的设计模式,它用于确保一个类只有一个实例,并提供一个全局访问点。

在PHP中,实现单例设计模式有以下几种方式:

饿汉式单例模式

饿汉式单例模式是指在类加载时就创建一个实例,然后直接返回该实例。这种方式的优点是实现简单,线程安全,但缺点是无法实现延迟加载。

1

2

3

4

5

6

7

class Singleton {

    private static $instance = new Singleton();

    private function __construct() {}

    public static function getInstance() {

        return self::$instance;

    }

}


懒汉式单例模式

懒汉式单例模式是指在第一次调用获取实例的方法时才创建一个实例。这种方式的优点是可以实现延迟加载,但缺点是在多线程环境下可能会出现线程安全问题。

1

2

3

4

5

6

7

8

9

10

class Singleton {

    private static $instance = null;

    private function __construct() {}

    public static function getInstance() {

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

            self::$instance = new Singleton();

        }

        return self::$instance;

    }

}

双重检查锁定单例模式

双重检查锁定单例模式是在懒汉式单例模式的基础上,通过加锁来保证线程安全。这种方式的优点是实现了延迟加载和线程安全,但缺点是会增加代码复杂度。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

class Singleton {

    private static $instance = null;

    private function __construct() {}

    public static function getInstance() {

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

            synchronized(self::class) {

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

                    self::$instance = new Singleton();

                }

            }

        }

        return self::$instance;

    }

}


使用静态变量的单例模式

使用静态变量的单例模式是指将实例保存在静态变量中,并提供一个静态方法来获取该实例。这种方式的优点是实现简单,线程安全,但缺点是无法实现延迟加载。

1

2

3

4

5

6

7

8

9

10

class Singleton {

    private static $instance = null;

    private function __construct() {}

    public static function getInstance() {

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

            self::$instance = new Singleton();

        }

        return self::$instance;

    }

}

以上是几种常见的PHP单例设计模式的实现方式。根据具体的需求和场景,可以选择合适的方式来实现单例。

以上就是php单利设计模式有哪些的详细内容!

猜你喜欢

【PHP】PHP面试题
100 个常见的 PHP 面试题1) PHP是什么?PHP是一种基于脚本的web语言,开发者可以动态的创建网页。2) PHP的全称?Hypertext Preprocessor(超文本预处理器)。3) PHP与哪些编程语言相似?PHP语法类似于Perl和C。5) 实际使用的PHP是哪个版本?推荐使用版本7。6) 如何从命令行执行PHP脚本?在命令行界面(CLI),指定要执行的脚本的文件名,如下所示:1php script.php7) 如何从命令行界面运行交互式PHP Shell?将PH
发表于:2024-05-22 浏览:291 TAG:
【PHP】Composer配置中国全量镜像
查看当前的镜像源:composer config -g -l repo.packagist切换国内镜像阿里云 composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/腾讯云 composer config -g repos.packagist composer https://mirrors.c
发表于:2023-12-18 浏览:400 TAG:
【PHP】php8的扩展arginfo生成工具之使用初体验
hp8提供了非常方便的扩展函数或类参数信息的生成工具。只需要维护一份xyz.stub.php,就可以使用工具生成 xyz_arginfo.h。毫无疑问,这种方式,又降低了广大 phper 开发扩展的门槛,更易维护。上手体验:生成扩展骨架。cd ext php ext_skel.php --ext test随便添加一个函数,更改 test.stub.php。<?php   /** @generate-function-entrie
发表于:2024-01-01 浏览:292 TAG:
【PHP】php中向数组增加元素
在PHP编程中,数组是非常常用的一种数据类型。数组的特点在于可以存储一组数据,并且可以通过索引或者键值来访问这些数据。在编写PHP代码时,我们经常需要向数组中增加新的元素。本文将介绍如何在PHP中向数组增加元素。一、向数组尾部添加元素首先,我们来介绍在数组尾部添加新元素的方法。可以使用PHP内置函数array_push()向数组末尾添加一个或者多个元素。语法如下:array_push($array, $value1, $value2, ...)其中,$array表示要添加元素的目标数组
发表于:2023-12-20 浏览:307 TAG:
【PHP】php中?:与??运算符有什么不同?
在PHP 7中,有两个类似的语法结构:“??”和“?:”,它们都是用于处理条件判断和返回值的运算符。尽管它们看起来相似,但它们的作用和用法有一些区别。"?:"是三目运算符,语法格式为:$result = $test ? $test : ′ ′ ; 意思就是当test存在时(即empty($test)为false),则返回它本身,否则返回空(当然也可以返回其他,这里的空只是举个例子)。"??"是php7新引入的语法,它相当于是isset($result[‘k
发表于:2024-08-01 浏览:281 TAG:
【PHP】RestFul简介和使用
1.1 RestFul简介REST全称是(Resource) Representational State Transfer,翻译过来为“资源代表状态转移”,中文意思是表述性状态转移。它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:“我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则,不是标
发表于:2024-05-24 浏览:230 TAG:
【PHP】关于bug率计算和它的实际意义
问题1:bug率有什么作用?my opion:用处有很多,需要具体情况具体分析,不过主要作用一般是来评价工作产品的质量。如果bug率较高,说明系统质量较差,需要大量的返工。项目经理就需要做好缺陷分析(缺陷的类型、分布、严重程度等),找出原因,以便做好下一阶段的缺陷预防工作。除此之外,还可以结合其它方面的信息,判断是否一些工作不充分。譬如,如果缺陷密度过低,有两个原因:可能工作产品质量确实高;也可能评审或测试不充分,更多的缺陷没有发现。在某些公司,bug率也作为项目度量考核的一项指标。问题2:bu
发表于:2024-06-22 浏览:263 TAG:
【PHP】PHP开发中如何使用Nginx实现负载均衡
在现代web应用开发中,高并发访问是一个必须要面对的挑战。负载均衡是解决这个问题的一种有效的方案。在php开发中,使用nginx实现负载均衡是一个非常常见的方法。本文将详细介绍如何在php开发中使用nginx实现负载均衡。一、Nginx及负载均衡的基本概念NginxNginx是一款轻量级的高性能的web服务器和反向代理服务器。它的出现解决了Apache这样的传统web服务器在高并发访问下的性能瓶颈。Nginx具有极高的性能、稳定性和安全性,并且支持大量的并发连接。负载均衡负载均衡是一种将网络流量
发表于:2024-05-29 浏览:345 TAG:
【PHP】php可以开发动态网站的原因是什么
php可以开发动态网站的原因是:1、PHP语言具有开源性,可以简化开发过程,实现处理不同项目的需求;2、具有可移植性,不在局限于某个特定操作系统进行开发和部署;3、具有很高的可扩展性,支持多种插件和拓展,增强功能和性能;4、简单易学,支持所有的主流操作系统,有大量的支持和教程,使得语法和逻辑直观易于了解;5、处理性能高,可以处理大量的流量和数据,支持多线程并发处理请求等等。本教程操作系统:Windows10系统、php8.1.3版本、Dell G3电脑。PHP是一种通用开源脚本语言,主
发表于:2023-12-19 浏览:336 TAG:
【PHP】中文日文字符串校验解决方案
由于开发需要,要识别中文和日文文字段落,网上查了很多资料,大部分都是使用正则校验preg_match,但中文和日文有些汉字是相同的,不能直接校验出结果,经过多次修改,也算是找出了解决办法。首先找到中文和日文的正则校验中文校验:preg_match('/\p{Han}+/u','',$str);日文校验:preg_match('/[\x{4E00}-\x{9FBF}\x{3040}-\x{309F}\x{30A0}-\x{30FF}]/u',&nbs
发表于:2023-12-14 浏览:392 TAG: