• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP单例模式数据库连接类与页面静态化实现方法

    本文实例讲述了PHP单例模式数据库连接类与页面静态化实现方法。分享给大家供大家参考,具体如下:

    数据库test中数据表account内容

    单例模式的数据库连接类

    db.php

    ?php
    //单例模式的数据库连接
    class DB {
      //存储实例的静态成员变量
      static public $_instance;
      //数据库连接静态变量
      static public $_connectSource;
      //连接数据库配置,由于前几天学习了PDO,这里就使用PDO
      private $_dbConfig = array(
        'host' => 'localhost',
        'user' = > 'root',
        'password' => '',
        'database' => 'test'
      );
      //禁止外部实例化
      private function __construct() {
      }
      //实例化
      public static function getInstance() {
        if(self::$_instance instanceof self) {
          return self::$_instance;
        }
        self::$_instance = new self();
        return self::$_instance;
      }
      //数据库连接
      public function connect() {
        //如果不存在数据库连接就创建一个
        if(!self::$_connectSource) {
          try {
            $dsn = 'mysql:host='.$this->_dbConfig['host'].';dbname='.$this->_dbConfig['database'];
            $username = $this->_dbConfig['user'];
            $password = $this->_dbConfig['password'];
            self::$_connectSource = new PDO($dsn, $username, $password);
          }catch(PDOException $e) {
            echo $e->getMessage();
          }
        }
        return self::$_connectSource;
      }
    }
    ?>
    
    

    PHP实现页面静态化的例子

    其实原理很简单,这里用到了几个函数,ob_start()ob_get_contents()file_put_contents()ob_start()是开启缓冲区的意思,ob_get_contents()是得到缓冲区内容的意思,file_put_contents()是把内容放到一个文件里的意思,如果不理解缓冲区的意思,可以自行百度一下,我理解的缓冲区就是,当我们要在PHP中输出一些数据显示出来时,会先经过缓冲区,而我们可以从缓冲区中得到这些内容。所以实现纯静态页面的方法就是,获取缓冲区中的内容放到一个静态文件中,并在入口中根据需求设置访问动态文件还是静态文件,这种方法一般用于数据不经常变化的动态页面中。下面就来具体的实现这个功能。

    static.php

    ?php
    //1.使用刚才写的数据库连接类连接数据库
    //2.把获取到的数据填充到模板文件中
    //3.把页面转化为静态文件
    //如果我们本地有这个静态文件并且这个文件生成的时间小于5分钟那么就去访问这个静态文件,filemtime()用来获取文件的最后修改时间
    if(is_file('./static.shtml')  (time() - filemtime('./static.shtml'))  300) {
      //这里很简单,直接把静态文件拿过来
      require_once('./static.shtml');
    }else {
    //如果不存在这个静态文件,或者这个静态文件的最后修改时间距离现在已经超过了5分钟,那么就访问动态获取数据的模板,然后更新static.shtml文件的内容
      //连接数据库
      header('Content-Type:text/html;charset=utf-8');
      require_once('./db.php');
      $connect = DB::getInstance()->connect();
      //执行查询操作
      $sql = 'select * from account';
      $res = $connect->query($sql);
      //开启缓冲区
      ob_start();
      //ob_get_clean()这个函数可以获取缓冲区的内容并清空,一会我会测试一下ob_get_clean()和ob_get_contents()的
      require_once('./static_show.php');
      //把缓冲区的内容写入到静态文件
      file_put_contents('./static.shtml', ob_get_contents());
    }
    ?>
    
    

    动态展示模板文件static_show.php

    ?php
      foreach($res as $row) {
        echo '名字:'.$row['name'].'br/>';
        echo '钱包:'.$row['money'].'br/>';
        echo 'hr/>';
      }
    ?>
    
    

    当我们访问static.php的时候,因为没有static.shtml,所以会先执行else的操作,展示在static_show.php并生成static.shtml文件

    如果这时候我把数据库修改了,zjp的money改为800,然后再访问static.php会展示什么样的内容呢,没错,zjp的钱包还是600,为什么呢,因为它执行了if中的内容,直接显示了static.shtml,我们可以看一下static.shtml是什么样的:

    如果5分钟过后再访问staitc.php呢,会显示什么呢,没错!zjp的钱包就变成800了,并且static.shtml的内容会更新为zjp的钱包是800。

    测试ob_get_clean()和ob_get_contents()

    测试方法很简单:

    ?php
    $test = 'Hello World!';
    //开启缓冲区
    ob_start();
    //测试ob_get_contents()
    echo $test;
    echo ob_get_contents();
    //输出结果:Hello World!Hello World!
    //测试ob_get_clean()
    echo $test;
    echo ob_get_clean();
    //输出结果:Hello World!
    echo $test;
    ob_get_clean();
    //输出结果:
    ?>
    
    

    这样就可以很清楚的看出来了,当我们使用了ob_get_clean()的时候,输出语句并不会输出任何值,因为ob_get_clean()会获取缓冲区中的内容并将缓冲区清空。所以当我们echo test的时候并没有得到test的时候并没有得到test的值,echo ob_get_clean()的时候却能够获取到值。而当我们使用ob_get_contents()的时候缓冲区中的内容并没有被清空。

    实际上,ob_get_clean()函数相当于执行了,ob_get_contents()ob_end_clean()

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP实现HTML页面静态化的方法
    • PHP实现页面静态化的超简单方法
    • ThinkPHP 3.2.3实现页面静态化功能的方法详解
    • 使用ob系列函数实现PHP网站页面静态化
    • PHP 实现页面静态化的几种方法
    • 详解php实现页面静态化原理
    • 实例讲解PHP页面静态化
    • 利用php的ob缓存机制实现页面静态化方法
    • php实现页面纯静态的实例代码
    • PHP将整个网站生成HTML纯静态网页的方法总结
    • 基于php伪静态的实现详细介绍
    • PHP页面静态化——纯静态与伪静态用法详解
    上一篇:PHP实现的策略模式示例
    下一篇:PHP实现的数据对象映射模式详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP单例模式数据库连接类与页面静态化实现方法 PHP,单例,模式,数据库,连接,