php mysql 单例模式_PHP中单例模式数据库应用 | Lancer's Blog

最近接触到一个新名词:单例模式。

刚开始一直百思不得其解,百度的结果居然是平时看到的 Db::getInstance()-> ,原来这个就是所谓的单例模式。

先看我们平时使用的方法

classCategory{//定义一个获取分类方法functiongetCategory(){//这时我们不得不重新初始化一个数据库句柄,试想多个应用场景下,这样的代码是多么可怕啊?!$db=newDB();$db->query($sql);//当然也可以使用全局变量global$db;//但一般在OPP编程中,不使用这样的方法,同时global存在安全隐患//同时单例模式恰恰是对全局变量的一种改进,避免了那些存储唯一实例的全局变量污染命名空间}}

倘若采用单例模式

classCategory{//定义一个获取分类方法functiongetCategory(){//所有的应用情景只有一个数据库句柄资源,嘿嘿,效率老高了,//资源也大大的得到节省,代码简洁明了:)$query=Db::getInstance()->query($sql);$array=Db::getInstance()->fetch_array($query);}}

首先还是要知道明确单例模式这个概念。所谓单例,就是只有一个实例。

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,

所以这个类我们称之为单例类。

一般来说使用单例模式的情况有如下:

一是某个类只能有一个实例;

二是它必须自行创建这个实例;

三是它必须自行向整个系统提供这个实例。

这么说来我们连接数据库类倘若使用单例模式,可以对系统的资源起到节省作用,同时可以避免实例化类。

下面写个单例类

classMySQL{/**

*  静态成员变量 保存全局实例

*@accessprivate

*/staticprivate$_instance=NULL;/**

* 私有化构造函数,防止外界实例化对象

*/privatefunction__construct(){}/**

*  私有化克隆函数,防止外界克隆对象

*/privatefunction__clone(){}/**

*  静态方法, 单例统一访问入口

*@returnobject  返回对象的唯一实例

*/staticpublicfunctiongetInstance(){if(is_null(self::$_instance)|| !isset(self::$_instance)){self::$_instance=newMySQL();}returnself::$_instance;}/**

* 数据库其他方法 ......

*/publicfunctionconnect(){}publicfunctionquery(){}}

从以上代码中,我们总结出 PHP 单例模式实现的核心要点有如下三条:

1. 需要一个保存类的唯一实例的静态成员变量(通常为$_instance 私有变量)

2. 构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new类从而失去单例模式的意义

3. 必须提供一个访问这个实例的公共的静态方法(通常为 getInstance 方法),从而返回唯一实例的

一个引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值