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&amp;&amp;mysql)五
Oct 09 PHP
解析php入库和出库
Jun 25 PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
Aug 23 PHP
php上传图片客户端和服务器端实现方法
Mar 30 PHP
PHP的openssl加密扩展使用小结(推荐)
Jul 18 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 PHP
php结合md5的加密解密算法实例
Sep 30 PHP
Smarty模板常见的简单应用分析
Nov 15 PHP
php操作mongodb封装类与用法实例
Sep 01 PHP
php 实现银联商务H5支付的示例代码
Oct 12 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
基于文本的留言簿
2006/10/09 PHP
php Mysql日期和时间函数集合
2007/11/16 PHP
php的ajax框架xajax入门与试用介绍
2010/12/19 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
Angular路由简单学习
2016/12/26 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
微信小程序之swiper滑动面板用法示例
2018/12/04 Javascript
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
python简单程序读取串口信息的方法
2015/03/13 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
2018/05/05 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
硕士生工作推荐信
2014/03/07 职场文书
车间主任岗位职责
2014/03/16 职场文书
在校实习生求职信
2014/06/18 职场文书
2015年宣传工作总结
2015/04/08 职场文书
老公出轨后的保证书
2015/05/08 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
2015年教师节感言
2015/08/03 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
《失物招领》教学反思
2016/02/20 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书