当前位置: 首页 > news >正文

【建议收藏】PHP单例模式详解以及实际运用

PHP单例模式详解以及实际运用

什么是单例模式?

首先我们百度百科他怎么说?

单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)、

大白话:对于PHP而言 在一次生命周期中,如果使用了单例模式。我们不管实例化多少次。整个生命周期只会存在一个实例。

为什么要使用单例模式?

  1. 实例控制
    单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
  2. 灵活性
    因为类控制了实例化过程,所以类可以灵活更改实例化过程。

应用的场景

  1. Mysql连接
  2. Redis连接
  3. 等等其他连接

这些场景为什么要用到单例模式?

  • 防止重复的实例化连接。造成连接浪费。在一次生命周期中,我们只要创建一次连接就可以了。

单例代码示例

  1. PHP代码示例
<?phpclass Singleton
{private static $instance = null;// 禁止被实例化private function __construct(){}// 禁止cloneprivate function __clone(){}//  实例化自己并保存到$instance中,已实例化则直接调用public static function getInstance(): object{if (empty(self::$instance)) {self::$instance = new self();}return self::$instance;}public function test(): string{return '这是一个单例模式';}}// 两次调用返回同一个实例
$single1 = Singleton::getInstance();
$single2 = Singleton::getInstance();var_dump($single1, $single2);
echo $single1->test();
  1. Golang代码示例

    1. (饿汉模式) 初始化就创建
    package mianimport "fmt"var instanse *singlertype singler struct {Name string
    }func NewSingler()*singler{return instanse
    }func init() {instanse = new(singler)instanse.Name = "test"
    }func main() {singler := NewSingler()fmt.Println(singler.Name)
    }
    
    1. (懒汉模式)需要的模式就创建
    package mainimport ("fmt""sync"
    )var instanse *singler
    var mutex sync.Mutextype singler struct {Name string
    }func NewSingler()*singler {if instanse == nil{mutex.Lock()defer mutex.Unlock()if instanse == nil{instanse = new(singler)instanse.Name = "test"}}return instanse
    }func main() {singler := NewSingler()fmt.Println(singler.Name)
    }
    
http://www.lryc.cn/news/41630.html

相关文章:

  • 【十二天学java】day04-流程控制语句
  • Pandas 与 PySpark 强强联手,功能与速度齐飞
  • 【Zabbix实战之部署篇】docker部署Zabbix+grafana监控平台
  • acm省赛:高桥和低桥(三种做法:区间计数、树状数组、线段树)
  • stm32-定时器详解
  • 《硬件架构的艺术》读书笔记:Chapter 1 亚稳态的世界
  • 开箱即用的密码框组件
  • ChatGPT能否取代程序员?
  • 案例分享 | 金融微服务场景下如何提升运维可观测性
  • CentOS8提高篇3:Centos8安装播放器(mplayer vlc)
  • MySQL-存储过程
  • 经典七大比较排序算法 · 下 + 附计数和基数排序
  • HTTPS协议,看这篇就够了
  • C语言学习之路--结构体篇
  • 【LINUX】初识文件系统
  • 金三银四Java面试题及答案整理(2023最新版) 持续更新
  • 7个角度,用 ChatGPT 玩转机器学习
  • 关于多层板,你了解多少?
  • 使用sqlalchemy-gbasedbt连接GBase 8s数据库
  • 前端如何丢掉你的饭碗?
  • 栈、队列、优先级队列的模拟实现
  • JMM内存模型
  • Linux- 系统随你玩之--玩出花活的命令浏览器-双生姐妹花
  • 【深度学习】基于Hough变化的答题卡识别(Matlab代码实现)
  • Linux - 进程控制(创建和终止)
  • 依赖注入~
  • 【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程
  • Go语言异步下载视频
  • 前缀树(字典树/Trie) -----Java实现
  • ​申请专利需要具备什么条件