gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP单例模式数据库连接类与页面静态化实现方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

数据库test中数据表account内容 。

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

单例模式的数据库连接类 。

db.php 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?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 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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 。

?
1
2
3
4
5
6
7
<?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文件 。

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

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

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

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

测试ob_get_clean()和ob_get_contents() 。

测试方法很简单:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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程序设计有所帮助.

原文链接:https://blog.csdn.net/sinat_21125451/article/details/51131943 。

最后此篇关于PHP单例模式数据库连接类与页面静态化实现方法的文章就讲到这里了,如果你想了解更多关于PHP单例模式数据库连接类与页面静态化实现方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com