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 相关文章推荐
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 PHP
PHP array操作10个小技巧分享
Jun 23 PHP
windows下zendframework项目环境搭建(通过命令行配置)
Dec 06 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
php 获取本地IP代码
Jun 23 PHP
PHP中source #N问题的解决方法
Jan 27 PHP
关于PHP开发的9条建议
Jul 27 PHP
深入解析PHP的Yii框架中的event事件机制
Mar 17 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
PHP实现的统计数据功能详解
Dec 06 PHP
php微信公众号开发(4)php实现自定义关键字回复
Dec 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
星际争霸秘籍
2020/03/04 星际争霸
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
如何实现vue的tree组件
2020/12/03 Vue.js
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
Python File(文件) 方法整理
2019/02/18 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
python字符串反转的四种方法详解
2019/12/02 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
纪律教育月活动总结
2014/08/26 职场文书
合作经营协议书范本
2014/09/16 职场文书
住房抵押登记委托书
2014/09/27 职场文书
软件研发工程师岗位职责
2014/09/30 职场文书
运动会主持人开幕词
2016/03/04 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
python基础之匿名函数详解
2021/04/21 Python
Python机器学习之逻辑回归
2021/05/11 Python