单例

单例类 如何设计  单例设计模式
class Student
{

}

$s1 = new Stuent();//凡是new 都会在堆内存开辟空间
$s2 = new Stuent();

print($s1 == $s2);//false

class SingleTon
{
   //3 将内部产生的唯一实例缓存起来
   private static $instance;
   //private static $instance = new SingleTon();

   //1 构造器私有化
   private __construct function()
   {

   }

   //2 必须提供一个公开访问的方法 获取唯一实例
   public static getInstance()
   {
      if($instance == null)
      {
         $instance = new SingleTon();
      }
      return $instance;
   }

   private __clone{}
}

$s3 = SingleTon::getInstance();
$s4 = SingleTon::getInstance();

3个补充
   1.分为懒汉式和饿汉式

   2.注意__clone

   3.在多线程环境下,多个请求并发访问同一段代码时候如何保证单例 ,加锁的机制,可能导致线程问题的代码锁起来
  
     public static getInstance()
   {
      //同步代码块 加锁
      synchronous
      {
         if($instance == null)
         {
             $instance = new SingleTon();
         }
 
      }
      return $instance;
   }

 扩展:加锁的范围有讲究:锁的越多,效率越低
      可以锁代码块,可以锁代码块所在的方法,可以锁代码块所在方法所在对象

      对比 数据库有行级锁、列级锁,表级别锁!!!

转载于:https://www.cnblogs.com/wxlf/p/8117316.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值