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 相关文章推荐
mysql 字段类型说明
Apr 27 PHP
那些年一起学习的PHP(三)
Mar 22 PHP
PHP中的生成XML文件的4种方法分享
Oct 06 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
Jan 06 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
Feb 17 PHP
php自定义session示例分享
Apr 22 PHP
ThinkPHP单字母函数(快捷方法)使用总结
Jul 23 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
Dec 15 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 PHP
laravel通过a标签从视图向控制器实现传值
Oct 15 PHP
PHP 图片处理
Sep 16 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
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
js 数组实现一个类似ruby的迭代器
2009/10/27 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
如何用JavaScript定义一个类
2014/09/12 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
最全的Javascript编码规范(推荐)
2016/06/22 Javascript
详解Axios 如何取消已发送的请求
2018/10/20 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
Vue实现图书管理小案例
2020/12/03 Vue.js
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
浅谈python迭代器
2017/11/08 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
python 处理string到hex脚本的方法
2018/10/26 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
高级电工工作职责
2013/11/21 职场文书
大学同学聚会邀请函
2014/01/19 职场文书
给校长的建议书400字
2014/05/15 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
党员个人承诺书
2015/04/27 职场文书
公司酒会致辞
2015/07/30 职场文书
python实现自动化群控的步骤
2021/04/11 Python