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 09 PHP
PHP5 安装方法
Jan 15 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
Jun 07 PHP
php调用dll的实例操作动画与代码分享
Aug 14 PHP
linux下实现定时执行php脚本
Feb 13 PHP
PHP实现一维数组转二维数组的方法
Feb 25 PHP
php实现通用的信用卡验证类
Mar 24 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
May 12 PHP
PHP数据库操作四:mongodb用法分析
Aug 16 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 PHP
PHP7变量处理机制修改
Mar 09 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
php实现简单文件下载的方法
2015/01/30 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
JavaScript 动态创建VML的方法
2009/10/14 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
实用框架(iframe)操作代码
2014/10/23 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
javascript如何写热点图
2015/12/08 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
Python实现遍历数据库并获取key的值
2015/05/17 Python
python复制文件的方法实例详解
2015/05/22 Python
Python递归函数定义与用法示例
2017/06/02 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
Python实现模拟浏览器请求及会话保持操作示例
2018/07/30 Python
python中join()方法介绍
2018/10/11 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
Python实现仿射密码的思路详解
2020/04/23 Python
Python中and和or如何使用
2020/05/28 Python
高三自我鉴定怎么写
2013/10/19 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2014年绿化工作总结
2014/12/09 职场文书
导游词怎么写
2015/02/04 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
交通事故协议书范本
2016/03/19 职场文书