怎么在PHP中利用单例模式实现一个数据库连接类?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
目前创新互联已为上千多家的企业提供了网站建设、域名、雅安服务器托管、网站托管、服务器租用、企业网站设计、上虞网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。单例模式的数据库连接类
db.php
'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
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
'; echo '钱包:'.$row['money'].'
'; echo '
'; } ?>
当我们访问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()
测试方法很简单:
这样就可以很清楚的看出来了,当我们使用了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()。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联网站建设公司,的支持。