你真的懂单例模式吗

本文介绍了单例模式的基本概念及其在PHP中的实现方式。通过限制类的实例化过程,确保在整个应用中只存在一个实例,从而有效节约系统资源并简化对象管理。

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

浅谈单例模式
参考百度经验

单例模式顾名思义,就是对于指定的类只有一个实例,这样可以节省系统资源,也省去过多的实例化导致对象版本太多,不易管理。


1。首先需要保证该类不可以通过new来实例化。因为如果可以这样,那么就无法保证单例了。只需要把构造方法设置为private或者protected即可。

2。既然外部无法访问构造方法,那么也就无法实例化,就保证只能内部实例化,返回对象,那么就需要一个静态方法来,实例化该类本身并且返回该对象。

3.那么多次访问静态方法,不是也会创建不同的对象吗?这时候我们就需要一个静态属性来记录,如果该类已经被实例化过,就直接返回对象即可。

4.然后需要用final关键字防止该静态方法被继承,用__clone魔术方法防止该对象被克隆即可。

<?php
class single{
static public $object = null;
protected function __construct(){
  }
final static function NewOb(){
   if (self::$object instanceof self) {
   return self::$object;
   }
   self::$object = new self();
   return self::$object;
}
public function __clone(){
   echo "想克隆没门<br />";
}
}
$t1 = single::NewOb();
$t2 = single::NewOb();
$t3 = clone $t2;
if ($t1 === $t2) {
 echo '是一个对象<br />';
}else {
 echo '不是一个对象<br />';
}
if ($t3 === $t2) {
 echo '是一个对象<br />';
}else {
 echo '不是一个对象<br />';
}
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csw_coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值