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 相关文章推荐
玩转图像函数库―常见图形操作
Sep 03 PHP
PHP注释实例技巧
Oct 03 PHP
PHP 文件缓存的性能测试
Apr 25 PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
Mar 29 PHP
php 多关键字 高亮显示实现代码
Apr 23 PHP
Yii PHP Framework实用入门教程(详细介绍)
Jun 18 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 PHP
详解PHP版本兼容之openssl调用参数
Jul 25 PHP
php中上传文件的的解决方案
Sep 25 PHP
Linux下 php7安装redis的方法
Nov 01 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
Feb 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
mysql 搜索之简单应用
2007/04/27 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
PHP 获取文件权限函数介绍
2013/07/11 PHP
php判断linux下程序问题实例
2015/07/09 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
js异或加解密效果代码
2008/06/25 Javascript
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
微信小程序上传图片到php服务器的方法
2019/05/23 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python生成随机MAC地址
2015/03/10 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
Tuckernuck官网:经典的美国品质服装、鞋子和配饰
2021/01/11 全球购物
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
自荐信格式范文
2013/10/07 职场文书
读书心得体会
2013/12/28 职场文书
酒吧创业计划书
2014/01/18 职场文书
养生餐厅创业计划书范文
2014/03/26 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL
python套接字socket通信
2022/04/01 Python