单例模式

本文介绍了单例模式的基本概念及其在PHP中的实现方式。探讨了单例模式的主要应用场景,包括节省内存资源和保持数据一致性,并通过实例展示了如何创建单例类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式入门系列

单例模式保证了在代码中的任何部分引用的都是同一个对象。这样的特性让人很容易想到它的两个用途:1. 节约内存 2. 用来保存一些在代码执行之后不想被释放的数据(比如说统计代码执行次数或者生成某些不能重复的序列号)。

但是这最直观的两点在PHP中都不是很容易实现。在每次请求结束之后,PHP的所有资源都会回收。即使是使用最频繁的数据,在一次请求中一般也不会用到太多,节约内存并不明显;又因为所有资源都会在请求结束时释放,所以如果想要实现多次请求间数据共享,就只能通过数据库、memcached/redis等缓存或者直接将数据保存在文件中实现。

单例模式另一个经常被提到的使用场景是用它来替代全局变量。在这方面单例类的优势我还想的不是很明白,什么时候想清楚了再补上。

代码:

<?php

class Sington
{

    private static $instance;
    private $word;

    //构造方法设为私有
    private function __construct()
    {

    }

    //覆盖__clone方法,防止类被clone
    private function __clone()
    {

    }

    //通过该方法获取对象
    public static function getInstance()
    {
        if (empty(self::$instance)) {
            self::$instance = new Sington();
        }
        return self::$instance;
    }

    public function setWord($word)
    {
        $this->word = $word;
    }

    public function getWord()
    {
        return $this->word;
    }

}

$temp = Sington::getInstance();
$temp2 = Sington::getInstance();
$temp->setWord("Hello,world");
var_dump($temp->getWord());//输出“Hello,world”
var_dump($temp2->getWord());//输出“Hello,world”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值