zoukankan      html  css  js  c++  java
  • php单例模式在数据库连接中的使用

          今天同事问到一个关于单例模式在php中是否有用的问题,我们知道,单例的目的是为了避免重复生产相同的对象,一般情况在数据库连接中,为了避免多次拿到相同数据库连接,使用到单例模式,我们来看一下单例模式数据库连接中的使用。

      我们先看一段代码,我们想对数据库做两次连接

    <?php
    $con
    = mysql_connect("127.0.0.1", "xxxxxxx", "xxxxxxx"); $con1 = mysql_connect("127.0.0.1", "xxxxxxx", "xxxxxxx"); var_dump($con1); var_dump($con);
    sleep(1000); //避免脚本执行完连接中断

          从结果,我们可以看到$con和$con1的值是一样的,实际上mysql_connect()函数返回的是php脚本申请到的socket标识符,一旦发现申请过,同时发现不需要从新连接,它就返回申请过的标识符,但是一旦因为超时等原因关闭了连接,该socket标识符失效了怎么办。mysql_connect()提供第四个参数来表示是否需要从新连接我们看一下

    <?php
    $con
    = mysql_connect("127.0.0.1", "xxxxxxx", "xxxxxxx", true); var_dump($con); $con1 = mysql_connect("127.0.0.1", "xxxxxxx", "xxxxxxx", true); var_dump($con1);
    sleep(1000)

    现在,我们发现建立了两次连接,我们可以用同样的方式,建立三次,四次,甚至更多的连接,可是这样的方式,必定带来连接资源的极大损耗,我们只需要一个有用的连接,其余的都释放掉,如此,我们封装一下测试代码,如下:

    <?php
    class
    instance { static $link; public static function getLink($newLink = false) { if(isset(self::$link) && self::$link && !$newLink) { return self::$link; } else { self::$link = mysql_connect("127.0.0.1", "xxxxxxx", "xxxxxxx", $newLink); return self::$link; } } } var_dump(instance::getLink()); //获取新连接 var_dump(instance::getLink()); var_dump(instance::getLink(true)); //获取新连接 var_dump(instance::getLink(true)); //获取新连接 var_dump(instance::getLink());

    我们再看一下结果,有三处获取新连接,在获取新连接后,由于更新self::$link 的结果,旧的连接就会被释放掉。

     

    总结:

    1、数据库连接的单例模式可以提供唯一可使用对象,释放无用连接资源

    2、封装代码,使得代码简洁,清晰

  • 相关阅读:
    jQuery操作单选按钮(Radio)
    Django:DRF实现模糊搜索
    Django:实现导入功能,及下载模版
    python使用DES加密解密
    在线OCR识别
    bootstrap-table导出时存在bootstrap-switch按钮如何导出
    Django:解决时间显示格式含有T
    翻页时bootstrap-switch样式失效
    bootstraptable导出
    统计文件行数
  • 原文地址:https://www.cnblogs.com/yimuren/p/4110775.html
Copyright © 2011-2022 走看看