php应用单例模式实现一个数据库类

发布时间:2019-08-07 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php应用单例模式实现一个数据库类脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

单例模式(Singleton Pattern 单件模式或单元素模式)
单例模式有以下3个特点:
1、一个类只能有一个类对象(只能实例化一个对象)
2、它必须自己创建这个实例
3、它必须自行实例化并向整个系统提供这个实例
4、构造函数,克隆函数必须声明为私有的,必须提供一个访问这个实例的公共静态方法(通常命名为getInstance),从而返回唯一实例的一个引用

采用单例模式的原因

PHP语言是一种解释型的脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资都会被回收。也就是说,PHP在语言级别上没办法使得某个对象常驻内存,这和编译型语言不同,比如在java中单例会一直存在整个应用程序的生命周期里,变量是跨页面的,真正做到这个实力在应用程序生命周期的唯一性。然而在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样的PHP单例模式就没有什么意义,所以PHP单例模式我觉得只是针对单次页面级请求时粗线多个应用场景并需要共享同一对象资源时是非常有意义的。

php应用单例模式实现一个数据库类


上面的对象图中,有一个"单例对象",而"客户甲","客户乙"和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。

php代码实现单例模式:
<?php
class User {

//静态变量保存全局实例
private static $_instance=null;    
//私有构造函数,防止外界实例化对象
private function __construct(...){    
    $this->_db = pg_connect(...);//postgrsql    
}    
//私有克隆函数,防止外界克隆对象
private function __clone() {
};      

//静态方法,单例统一访问路口
public static function getInstance(){    
    if(! (self::$_instance instanceof self) ) {    
        self::$_instance = new self();    
    }    
    return self::$_instance;    
}    

?>

单例模式的优缺点:
优点:
1、改进系统的设计
2、是对全局变量的一种改进
缺点:
1、难于调试
2、隐藏的依赖关系
3、无法用错误类型的数据覆写一个单例

脚本宝典总结

以上是脚本宝典为你收集整理的php应用单例模式实现一个数据库类全部内容,希望文章能够帮你解决php应用单例模式实现一个数据库类所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。