php实现设计模式中的单例模式详解

当多个对象共用同一个实例时,就是使用单例模式的场景。在PHP中,我们可以使用静态变量或全局变量来实现单例模式。

实现单例模式的两种方法

1. 饿汉式(线程安全)

饿汉式单例是指在类加载时就创建一个单例对象,并且单例对象是final类型,在使用时已经创建好了,不需要检查是否为空,可以提高性能。但是如果单例类的构造函数中含有很多耗时的操作,会导致程序启动变慢。

class Singleton
{
    private static $instance = new Singleton();

    private function __construct(){}

    public static function getInstance()
    {
        return self::$instance;
    }
}

2. 懒汉式(线程不安全)

懒汉式单例是指在多线程环境下使用,只有在使用时才创建对象,可以节省资源。但是由于没有线程锁,可能会导致多个线程同时创建实例,出现线程安全问题。

class Singleton
{
    private static $instance;

    private function __construct(){}

    public static function getInstance()
    {
        if (self::$instance == null) {
            self::$instance = new Singleton();
        }
        return self::$instance;
    }
}

示例说明

示例一:Connection类

class Connection
{
    private static $instance;

    private function __construct() {}

    public static function getInstance()
    {
        if (self::$instance == null) {
            self::$instance = new Connection();
        }
        return self::$instance;
    }

    public function connect()
    {
        echo "Connected!\n";
    }
}

// 使用示例
$connection = Connection::getInstance();
$connection->connect(); // 输出:Connected!

在数据库操作中,一个连接只需要一个实例,使用单例模式可以确保只有一个实例被创建。

示例二:Config类

class Config
{
    private static $instance;

    private $configs = [];

    private function __construct() {}

    public static function getInstance()
    {
        if (self::$instance == null) {
            self::$instance = new Config();
        }
        return self::$instance;
    }

    public function set($key, $value)
    {
        $this->configs[$key] = $value;
    }

    public function get($key)
    {
        return $this->configs[$key];
    }
}

// 使用示例
$config = Config::getInstance();
$config->set("name", "John");
$name = $config->get("name");
echo $name; // 输出:John

在一些设置中,一个配置只需要一个实例,使用单例模式可以确保只有一个实例被创建。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实现设计模式中的单例模式详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • PHP dirname(__FILE__)原理及用法解析

    当在PHP脚本中使用相对路径时,我们有时候需要知道当前脚本所在的文件夹路径。PHP提供了一个获取当前脚本所在文件夹路径的方法:dirname(__FILE__)。本篇攻略将会详细讲解该方法的原理及用法,以及提供两个具体的示例说明。 原理解析 __FILE__在PHP中是一个魔术常量,表示当前文件的完整路径。而dirname是PHP提供的一个函数,用于获取一个…

    PHP 2023年5月27日
    00
  • 推荐10个提供免费PHP脚本下载的网站

    以下是推荐10个提供免费PHP脚本下载的网站的完整攻略。 1. 确定搜索关键词 为了找到可靠的并提供免费PHP脚本下载的网站,我们需要在搜索引擎中使用正确的关键词,比如“免费PHP脚本下载”、“PHP脚本库”、“PHP脚本分享”等。 2. 选择可靠的网站 在搜索结果中选择可靠的网站非常重要,因为网上充斥着大量的虚假或低质量的网站,它们可能会提供病毒或恶意软件…

    PHP 2023年5月23日
    00
  • PHP实现猜数游戏

    以下是“PHP实现猜数游戏”的完整攻略,包括游戏规则、实现步骤和两条示例说明。 游戏规则 猜数游戏是一款经典的游戏,玩法非常简单。游戏开始后,系统会随机生成一个固定的数字,然后用户需要输入猜测的数字,如果猜测的数字与系统生成的数字相同,那么游戏胜利;否则,系统会提示玩家需要继续猜测更大或者更小的数字。 实现步骤 以下是猜数游戏的实现步骤: 1. 实现表单 首…

    PHP 2023年5月27日
    00
  • php购物车实现代码

    下面我将为您详细讲解“PHP购物车实现代码”的完整攻略。 购物车实现的基本流程 创建购物车对象 根据用户的行为处理购物车状态,并将相关状态保存在购物车对象中 在用户需要查看购物车页面时,从购物车对象中读取购物车状态,并使用模板引擎渲染购物车页面 创建购物车对象 概念:购物车对象中包含了商品列表,商品数目,购物车总价等信息。 在PHP中,我们可以使用数组或者对…

    PHP 2023年5月24日
    00
  • PHP学习文件处理与文件上传 课件

    PHP学习文件处理与文件上传 课件攻略 文件处理 对于文件的操作可以使用PHP内置的文件系统函数,可以创建、读取、写入、重命名、删除等。下面是一些常用的文件操作函数: 文件打开和关闭 函数 描述 fopen() 打开文件或URL fclose() 关闭打开的文件资源 示例说明1: $file = fopen("example.txt", …

    PHP 2023年5月26日
    00
  • php获取文件后缀的9种方法

    以下是详细讲解“php获取文件后缀的9种方法”的完整攻略: 1. 使用pathinfo函数 使用pathinfo函数可以获取到文件路径的各种信息,其中包括文件后缀名。下面是获取文件后缀的代码示例: $file_path = ‘/path/to/file.jpg’; $extension = pathinfo($file_path, PATHINFO_EXTE…

    PHP 2023年5月26日
    00
  • php计算数组相同值出现次数的代码(array_count_values)

    PHP计算数组相同值出现次数的代码(array_count_values)完整攻略 array_count_values函数是一个PHP数组操作函数,用于计算一个数组中各个值出现的次数。该函数接受一个数组作为参数,并返回一个带有出现次数作为值的关联数组。下面是该函数的语法: array_count_values(array $array): array 其中…

    PHP 2023年5月26日
    00
  • 微信小程序地图导航功能实现完整源代码附效果图(推荐)

    微信小程序地图导航功能实现完整源代码附效果图攻略 一、效果介绍 此攻略实现了微信小程序地图导航功能,用户可以输入起点和终点,点击导航按钮即可在地图上显示导航路线,并提供导航提示功能。 二、实现方式 1. 准备工作 在微信小程序开发者工具中创建一个新项目,在app.json配置文件中添加需要使用的组件: { "usingComponents&quot…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部