PHP单例模式数据库连接类与页面静态化实现方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP单例模式数据库连接类与页面静态化实现方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4711字,纯文字阅读大概需要7分钟。
内容图文
本文实例讲述了PHP单例模式数据库连接类与页面静态化实现方法。分享给大家供大家参考,具体如下:
数据库test中数据表account内容
单例模式的数据库连接类
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文件
如果这时候我把数据库修改了,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()
测试方法很简单:
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相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
内容总结
以上是互联网集市为您收集整理的PHP单例模式数据库连接类与页面静态化实现方法全部内容,希望文章能够帮你解决PHP单例模式数据库连接类与页面静态化实现方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。