首页 > php教程 > php手册 > 正文

单例模式 俗称单例3步曲+1曲

php中文网
发布: 2016-10-15 10:31:48
原创
1592人浏览过

什么是单例模式?
    在整个应用中通过这个类只能实例化一个对象实例的设计模式

 

模式分类?

在所有模式设计中,有三种基础设计模式,单例模式,工厂模式,注册树模式,其他模式往往基于这几种模式,今天带来的是单例模式。


为什么要用单例模式?
    1。php常常和数据库打交道,如果在应用中频繁建立连接对象,进行new操作的话,会消耗大量的系统内存资源。(节省资源开销)
    2。在团队合作项目中,单例模式可以有效避免不同程序员new自己的对象时,造成人为的系统消耗。(节省资源开销)


 ------------------实现单例3部曲+1曲------------------

第一步:封装构造方法  private  __construct( ) { }
             原因:   构造函数在 new 出对象的时候第一个调用的方法  构造函数被申明为private或者protected这注定无法通过new的方法创建实例对象了。
 

表单大师AI
表单大师AI

一款基于自然语言处理技术的智能在线表单创建工具,可以帮助用户快速、高效地生成各类专业表单。

表单大师AI74
查看详情 表单大师AI

第二步:   通过类内的方法来创建对象实例。   static Single(){ }
           原因:我们往往往往是创建了对象后才调用对象的方法,而此时需要调用类里面的方法来创建对象。不受是否创建对象影响都能调用的方法的解决方案毋庸置疑那就是利用关键字--static
                   

 第三步:定义一个封装的静态变量    private static $instance
           原因:把实例化的唯一对象放在这个变量里面存起来
            
第四步(加1曲):私有化克隆的魔术方法:__c l o n e ();
            原因:对于一个类的对象,如果使用“clone运算符”,就会克隆出一个跟当前对象完全一样的新对象出来,并且:此时这个新对象还会自动调用该类中的魔术方法:_ _c l o n e ();只要其中有该方法;


代码演示

<?php

class Sing {
    
    //第三步:定义一个变量
    private static $instance= null;

    //第一步:封装构造函数
    private function  __construct(){
        
    }

    //第二步:使用类名调用这个类创建对象实例
    static  function getSingle(){
        if( !(self::$instance  instanceof self) ){	//instanceof判断一个对象是否是某个类的实例
	    self::$instance = new self();               //用变量来存储实例化出来的对象
	}
	    return self::$instance;
    }


    //第四步:禁止克隆实例化出来的对象
    private function __clone(){ }

}

 $danli = Sing::getSingle();
 var_dump($danli);    //输出   object(Sing)#1 (0) { }
 $danli2 = Sing::getSingle();   
 var_dump($danli2);   //输出   object(Sing)#1 (0) { }

$obj3 = clone $danli;   //此处禁止克隆单例对象实例
var_dump($obj3);  //Call to private Sing::__clone() from context '' in 错误行号


?>
登录后复制

 

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号