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伪造referer突破网盘禁止外连的代码
Jun 15 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
PHP通过正则表达式下载图片到本地的实现代码
Sep 19 PHP
学习使用curl采集curl使用方法
Jan 11 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 PHP
解析linux下安装memcacheq(mcq)全过程笔记
Jun 27 PHP
php 基础函数
Feb 10 PHP
PHP多进程编程实例详解
Jul 19 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
Sep 29 PHP
Laravel程序架构设计思路之使用动作类
Jun 07 PHP
PHP curl批处理及多请求并发实现方法分析
Aug 15 PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 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 HTML代码串截取代码
2008/12/29 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
javascript处理table表格的代码
2010/12/06 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
python检测远程端口是否打开的方法
2015/03/14 Python
python基于http下载视频或音频
2018/06/20 Python
numpy返回array中元素的index方法
2018/06/27 Python
python远程连接MySQL数据库
2019/04/19 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
蓝颜请假条
2014/04/11 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
党员个人年度总结
2015/02/14 职场文书
公司欠款证明
2015/06/24 职场文书
军训新闻稿范文
2015/07/17 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS