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

php 单例模式

1,单例模式,属于创建设计模式,简单来说就是一个类只能有一个实例化对象,并提供一个当前类的全局唯一可访问入口;

2,例子


<?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;}}// 两次调用返回同一个实例
$single1 = Singleton::getInstance();
$single2 = Singleton::getInstance();

 可继承的单例模式:

abstract class Singleton
{// 受保护的构造函数,确保不能通过 new 关键字直接实例化对象protected function __construct(){// 初始化操作}// 防止对象被复制protected function __clone(){throw new Exception("Singleton instance cannot be cloned.");}// 防止对象被序列化protected function __wakeup(){throw new Exception("Singleton instance cannot be serialized.");}// 获取实例的静态方法public static function getInstance(){if (!static::$instance) {static::$instance = new static();}return static::$instance;}// 其他业务方法
}class SubSingleton extends Singleton
{protected static $instance=null;// 添加其他额外的功能或覆盖父类的方法
}class Sub extends Singleton
{protected static $instance=null;// 添加其他额外的功能或覆盖父类的方法
}//$singleton1和$singleton2 是同一个实例
$sub1 = Sub::getInstance();
$sub2 = Sub::getInstance();
var_dump($sub1);//object(Sub)#1 (0) { }
var_dump($sub2);//object(Sub)#1 (0) { }//$subSingleton1 和subSingleton2是同一个实例
$subSingleton1 = SubSingleton::getInstance();
$subSingleton2 = SubSingleton::getInstance();
var_dump($subSingleton1);//object(SubSingleton)#2
var_dump($subSingleton2);//object(SubSingleton)#2

http://www.lryc.cn/news/98200.html

相关文章:

  • 【数据结构】实验二:顺序表
  • 【高级数据结构】线段树
  • qt简易闹钟
  • python和c加加有什么区别,c和c++和python先学哪个
  • Visual Studio 2022 cmake配置opencv开发环境
  • C++ GDAL找出多时相遥感影像缺失的日期并自动生成新的全零图像作为替补
  • 【AI底层逻辑】——篇章5(下):机器学习算法之聚类降维时间序列
  • P1980 [NOIP2013 普及组] 计数问题
  • 需求管理全过程流程图及各阶段核心关注点详解
  • Android开源 自定义emoji键盘,EmojiPack v2.1版本
  • SOLIDWORKS软件的优势分析 硕迪科技
  • Android性能优化之游戏的Theme背景图
  • 网络安全(黑客)系统自学,成为一名白帽黑客
  • lua学习-2 常见运算符
  • 【图像处理】使用 OpenCV 将您的照片变成卡通
  • 暖手宝UL认证 亚马逊UL测试报告 UL499测试项目
  • ES6模块化与异步编程高级用法
  • spring-cloud-starter-gateway 4.0.6负载均衡失败
  • Tomcat注册为Windows服务
  • 【Maven】Maven 中 pom.xml 文件
  • 2、Linux驱动开发:模块_引用符号
  • Python web实战 | Docker+Nginx部署python Django Web项目详细步骤【干货】
  • 【uniapp】实现买定离手小游戏
  • 【vim 学习系列文章 3 - vim 选中、删除、复制、修改引号或括号内的内容】
  • webpack联邦模块介绍及在dumi中使用问题整理
  • 记录一下Kotlin: Module was compiled with an incompatible version of Kotlin.的问题
  • html中使用Vue+element UI动态创建表单数据不显示问题
  • CentOS下 Docker、Docker Compose 的安装教程
  • [OnWork.Tools]系列 02-安装
  • 【外键合并python】