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制作简单的内容采集器的原理分析
Oct 01 PHP
PHP 日期时间函数的高级应用技巧
Oct 10 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
CI(CodeIgniter)框架介绍
Jun 09 PHP
PHP实现的比较完善的购物车类
Dec 02 PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 PHP
php中的动态调用实例分析
Jan 07 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
Nov 04 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 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
8个PHP数组面试题
2015/06/23 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
JavaScript XML操作 封装类
2009/07/01 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
Python标准库inspect的具体使用方法
2017/12/06 Python
Python import与from import使用及区别介绍
2018/09/06 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
幼儿教师自我鉴定
2013/11/02 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
敬老院活动总结
2014/04/28 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
民族学专业求职信
2014/07/28 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
端午节活动总结报告
2015/02/11 职场文书
大学生学生会工作总结2015
2015/05/26 职场文书
Django与数据库交互的实现
2021/06/03 Python
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android
浅谈Vue的computed计算属性
2022/03/21 Vue.js
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS
MySQL transaction事务安全示例讲解
2022/06/21 MySQL