• 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、封装代码,使得代码简洁,清晰

  • 相关阅读:
    二分查找代码
    顺序查找代码
    js原生获取css属性
    前端使用nginx上传文件时,进度获取不对
    动态赋值poster,无法显示
    git 命令收藏
    promise笔记
    vscode自定义代码块
    vuex的初始化
    webstorm添加自定义代码块
  • 原文地址:https://www.cnblogs.com/yimuren/p/4110775.html
Copyright © 2020-2023  润新知