php什么是单例模式实例,PHP中单例模式数据库应用

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

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

先看我们平时使用的方法

class Category{

//定义一个获取分类方法

function getCategory() {

//这时我们不得不重新初始化一个数据库句柄,试想多个应用场景下,这样的代码是多么可怕啊?!

$db = new DB();

$db->query($sql);

//当然也可以使用全局变量

global $db;

//但一般在OPP编程中,不使用这样的方法,同时global存在安全隐患

//同时单例模式恰恰是对全局变量的一种改进,避免了那些存储唯一实例的全局变量污染命名空间

}

}

倘若采用单例模式

class Category{

//定义一个获取分类方法

function getCategory() {

//所有的应用情景只有一个数据库句柄资源,嘿嘿,效率老高了,

//资源也大大的得到节省,代码简洁明了:)

$query = Db::getInstance()->query($sql);

$array = Db::getInstance()->fetch_array($query);

}

}

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

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

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

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

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

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

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

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

下面写个单例类

class MySQL{

/**

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

* @access private

*/

static private $_instance = NULL;

/**

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

*/

private function __construct() {}

/**

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

*/

private function __clone(){}

/**

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

* @return object 返回对象的唯一实例

*/

static public function getInstance() {

if (is_null(self::$_instance) || !isset(self::$_instance)) {

self::$_instance = new MySQL();

}

return self::$_instance;

}

/**

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

*/

public function connect() {}

public function query() {}

}

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

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

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

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

一个引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值