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动态创建Flash动画
Oct 09 PHP
深入解析PHP内存管理之谁动了我的内存
Jun 20 PHP
解析php下载远程图片函数 可伪造来路
Jun 25 PHP
codeigniter中测试通过的分页类示例
Apr 17 PHP
php使用str_replace实现输入框回车替换br的方法
Nov 24 PHP
PHP判断IP并转跳到相应城市分站的方法
Mar 25 PHP
微信支付开发维权通知实例
Jul 12 PHP
浅谈PHP正则中的捕获组与非捕获组
Jul 18 PHP
Yii框架分页实现方法详解
May 20 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 PHP
Linux系统下安装PHP7.3版本
Jun 26 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
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
2013/06/18 PHP
php+MySQL判断update语句是否执行成功的方法
2014/08/28 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
php为字符串前后添加指定数量字符的方法
2015/05/04 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
javascript 表单的友好用户体现
2009/01/07 Javascript
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
Angular CLI 使用教程指南参考小结
2019/04/10 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
介绍Python中的一些高级编程技巧
2015/04/02 Python
python检测是文件还是目录的方法
2015/07/03 Python
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
html如何对span设置宽度
2019/10/30 HTML / CSS
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
20岁生日感言
2014/01/13 职场文书
领导检查欢迎词
2014/01/14 职场文书
运动会广播稿200米
2014/01/27 职场文书
幼儿园庆六一活动方案
2014/03/06 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
付款承诺函范文
2015/01/21 职场文书
vue+spring boot实现校验码功能
2021/05/27 Vue.js