php设计模式之单例模式使用示例


Posted in PHP onJanuary 20, 2014

以下为单例模式代码:

<?php
class EasyFramework_Easy_Mysql{
    protected static $_instance = null;
    private function __construct(){    }
    public static function getInstance(){
        if (self::$_instance === null){
            self::$_instance = new self();
        }
        return self::$_instance;
    }
    protected function __clone(){
    }
}

$x = EasyFramework_Easy_Mysql::getInstance();
var_dump($x);

?>

/*
 * 1.第一步:
 * 既然是单例,也就是只能实例化一次,也就代表在实例化时
 * 不可能使用new关键字!!!!
 * 在使用new关键字时,类中的构造函数将自动调用。
 * 但是,如果我们将构造函数的访问控制符设置为protected或private
 * 那么就不可能直接使用new关键字了!!!
 * 第二步:
 * 无论protected/private修饰的属性或方法,请问在当前类的
 * 内部是否可以访问?---> 可以
 * 第三步:
 * 现在我们根本没有办法得到对象(因为你不能使用new关键字了),
 * 第四步:静态成员(包括属性或方法)在访问时,只能通过
 * 类名称::属性()
 * 类名称::方法()
 * 第五步:如果我现在存在一个静态方法--> getInstance()
 * 那么在调用时就应写成
 * $object = EasyFramework_Easy_Mysql::getInstance()
 * 如果,getInstance()方法可以得到唯一的一个对象
 * 也就代表是所谓的单例模式了!!!
 * 第六步,怎么让getInstace()只得到一个对象呢?
 * 既然要得到对象,那么肯定是:
 * $variabl = new ????();
 * 我们又知道静态属性的值是可以所有的对象来继承的!!!
 * 静态成员是属于类的,而非对象的!
 * 所以:
 * 第七步:声明一个静态的属性,用其存储实例化的对象
 * protectd static $_instance
 *
 * 并且初始值为null
 * 那么我在调用getInstance()方法时,只需要判断其值是否为空即可\
 *
 * public static function getInstance(){
 *     if(self::_instance === null){
 *      self::_instance = new self();
 *  }
 *  return self::_instance;
 * }
 * 在实例时,一定是这样写:
 * $x = EasyFramework_Easy_Mysql::getInstance();
 * 在第一时调用时,类的$_instance这个静态属性值为null,
 * 那么也就代表,getInstance()方法的判断条件为真了,
 * 也就意味着
 * self::$_instance这个成员有了值了!!!
 * 并且还返回这个值
 * $y = EasyFramework_Easy_Mysql::getInstance();
 * 在第二次或第N次调用时,self::$_instance已经有了值了
 * 也就代表getInstance()方法的条件为假了!!!
 * 也就代表其中的程序代表不可能执行了!!!
 * 也就代表将直接返回以前的值了!!!
 *
 *
 *
 * */
PHP 相关文章推荐
PHP实现MySQL更新记录的代码
Jun 07 PHP
PHP取进制余数函数代码
Jan 19 PHP
PHP6 中可能会出现的新特性预览
Apr 04 PHP
用PHP解决的一个栈的面试题
Jul 02 PHP
CentOS下PHP安装Oracle扩展
Feb 15 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
Mar 10 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
Sep 02 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 PHP
PHP simplexml_load_string()函数实例讲解
Feb 03 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 PHP
YII2框架使用控制台命令的方法分析
Mar 18 PHP
PHP中echo与print区别点整理
Mar 09 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 #PHP
php判断手机访问还是电脑访问示例分享
Jan 20 #PHP
利用中国天气预报接口实现简单天气预报
Jan 20 #PHP
php日历制作代码分享
Jan 20 #PHP
php使用qr生成二维码的示例分享
Jan 20 #PHP
php利用新浪接口查询ip获取地理位置示例
Jan 20 #PHP
php利用腾讯ip分享计划获取地理位置示例分享
Jan 20 #PHP
You might like
由php if 想到的些问题
2008/03/22 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
为你总结一些php信息函数
2015/10/21 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
微信小程序开发之Tabbar实例详解
2017/01/09 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
jquery+ajax实现异步上传文件显示进度条
2020/08/17 jQuery
python实现文本去重且不打乱原本顺序
2016/01/26 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
python绘制已知点的坐标的直线实例
2019/07/04 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
商场经理竞聘演讲稿
2014/01/01 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript