导航菜单
首页 > 网络编程 > PHP编程 » 正文

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

后台-系统设置-扩展变量-手机广告位-内容正文顶部
这篇文章主要介绍了PHP单例模式数据库连接类与页面静态化实现方法,涉及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是什么样的:

收藏此文 赞一个 ( ) 打赏本站

如果本文对你有所帮助请打赏本站

  • 打赏方法如下:
  • 支付宝打赏
    支付宝扫描打赏
    微信打赏
    微信扫描打赏
后台-系统设置-扩展变量-手机广告位-内容正文底部

相关推荐:

留言与评论(共有 0 条评论)
   
验证码:
二维码