在php语言种使用Trait实现Singleton单例模式代码示例
php  /  管理员 发布于 9个月前   207
php种在有trait之前,无法实现让父类实现单例模式,让子类去继承。
trait的出现很自然地解决了这个问题,我们可以写一个实现单例的trait,
然后把它组合到任何想实现单例的类
单例模式的定义
确保某一个类只有一个实例,不能重复实例,只能它自己实例化,而且向整个系统提供这个实例。
示例代码:
<?php
trait DlTrait {
protected static $instance = null;
public static function instance() {
if (null === self::$instance) {
self::$instance = new static();
}
return self::$instance;
}
}
class a
{
use DlTrait;
}
$a = a::instance();
$b = a::instance();
if($a === $b){
echo "相同";
}else{
echo "不相同";
}
有兴趣可以自行测试。
扩展知识
Trait实现Singleton单例模式的场景包括但不限于:
负载均衡器设计:
在某些情况下,例如设计一个负载均衡器,可能需要确保在整个系统中只有一个实例运行。
网站计数器:
一般采用单例模式实现,否则难以同步。
日志应用:
通常会使用单例模式实现,这是因为共享的日志文件一直处于打开状态,
只能有一个实例去操作,否则内容不好追加。
配置对象读取:
Web应用的配置对象一般也会应用单例模式,这是因为配置文件是共享的资源。
数据库连接池设计:
主要是节省打开或者关闭数据库连接所引起的效率损耗,因此也会采用单例模式来维护。
多线程的线程池设计:
通常也会采用单例模式,这是因为线程池要方便对池中的线程进行控制。
单例模式在某些特定的应用场景中也会被使用:
比如在Windows的回收站(RecycleBin)中,它也使用了单例模式。
在整个系统运行过程中,回收站一直维护着仅有的一个实例。
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号