php 单例模式

单例模式的含义

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例(唯一的一个实例).

单例模式的特点

  1. 一个类只能有一个对象;

  2. 必须是自行创建这个类的对象(不是被外界调用new出来的!!!);

  3. 要向整个系统提供这一个对象(全局,使用此类的文件或程序,需要引入);

  4. 构造方法必须是private的

  5. 该类需要有一个私有的 clone 方法,防止被克隆

单例模式的优点

  1. 单例模式会阻止其他对象实例化其自身的单例对象副本,从而确保所有的对象都访问唯一实例。
  2. 因为类控制了实例化过程,所以类可以灵活的变更类的实例化过程(自身创建实例,而不是new出来的)

单例模式的缺点

  1. 虽然数量很少,但如果每次对象请求引用都要检查类是否存在实例化对象,将扔需要一些开销,可以通过静态化方法解决做个问题。
  2. 使用单例对象时,开发人员必须记住不能使用 new 关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。

单例模式的代码实现demo

1 <?php

        class  Demo{
        
                static private $instance;   //创建静态私有属性,保存该类对象
                private $config;                 //参数
               
                //防止直接创建对象
                private function __construct($config){
                     $this->config = $config;
                     echo "我只能被实例化一次哦"."</br>";
                }
          
             //防止克隆
             private function __clone(){
       
             }

            //静态公共方法实例化类
            ststic public function getInstance($config){

                     //判断此类是否已经被实例化 ,没有被实例化,实例化,如果已经实例化,直接返回实例对象
                     if(!selt::$instance instanceof self){
                           self::$instance = new self($config);
                       }
                       
                       return self::$instance;
                       
            }

              //测试方法 (获取配置)  
              public function getConfig(){
                      
                      echo $this->config
            } 
            
           
      }

      //实例化本类
      $demo1 = Demo::getInstance("config_1");
      
      $demo1 -> getConfig();                         //输出config_1                 !!!!!!!!!!!!!!

     $demo2 = Demo::getInstance("config_2");         

     $demo2 -> getConfig();                         //依然输出config_1                 !!!!!!!!!!!!!!

    //以上2次调用getConfig()  之前都调用了 getInstance,传入了不同的配置参数,但是输出都是第一次传入的值,因为第一次已经实例化了类,已经存在类的对象,就不在重置config 属性了。因此2次结果一样!!!!!!!!!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值