本文實(shí)例講述了PHP單例模式數(shù)據(jù)庫連接類與頁面靜態(tài)化實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
數(shù)據(jù)庫test中數(shù)據(jù)表account內(nèi)容
單例模式的數(shù)據(jù)庫連接類
db.php
?php //單例模式的數(shù)據(jù)庫連接 class DB { //存儲實(shí)例的靜態(tài)成員變量 static public $_instance; //數(shù)據(jù)庫連接靜態(tài)變量 static public $_connectSource; //連接數(shù)據(jù)庫配置,由于前幾天學(xué)習(xí)了PDO,這里就使用PDO private $_dbConfig = array( 'host' => 'localhost', 'user' = > 'root', 'password' => '', 'database' => 'test' ); //禁止外部實(shí)例化 private function __construct() { } //實(shí)例化 public static function getInstance() { if(self::$_instance instanceof self) { return self::$_instance; } self::$_instance = new self(); return self::$_instance; } //數(shù)據(jù)庫連接 public function connect() { //如果不存在數(shù)據(jù)庫連接就創(chuàng)建一個(gè) 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實(shí)現(xiàn)頁面靜態(tài)化的例子
其實(shí)原理很簡單,這里用到了幾個(gè)函數(shù),ob_start()
,ob_get_contents()
,file_put_contents()
,ob_start()
是開啟緩沖區(qū)的意思,ob_get_contents()
是得到緩沖區(qū)內(nèi)容的意思,file_put_contents()
是把內(nèi)容放到一個(gè)文件里的意思,如果不理解緩沖區(qū)的意思,可以自行百度一下,我理解的緩沖區(qū)就是,當(dāng)我們要在PHP中輸出一些數(shù)據(jù)顯示出來時(shí),會先經(jīng)過緩沖區(qū),而我們可以從緩沖區(qū)中得到這些內(nèi)容。所以實(shí)現(xiàn)純靜態(tài)頁面的方法就是,獲取緩沖區(qū)中的內(nèi)容放到一個(gè)靜態(tài)文件中,并在入口中根據(jù)需求設(shè)置訪問動(dòng)態(tài)文件還是靜態(tài)文件,這種方法一般用于數(shù)據(jù)不經(jīng)常變化的動(dòng)態(tài)頁面中。下面就來具體的實(shí)現(xiàn)這個(gè)功能。
static.php
?php //1.使用剛才寫的數(shù)據(jù)庫連接類連接數(shù)據(jù)庫 //2.把獲取到的數(shù)據(jù)填充到模板文件中 //3.把頁面轉(zhuǎn)化為靜態(tài)文件 //如果我們本地有這個(gè)靜態(tài)文件并且這個(gè)文件生成的時(shí)間小于5分鐘那么就去訪問這個(gè)靜態(tài)文件,filemtime()用來獲取文件的最后修改時(shí)間 if(is_file('./static.shtml') (time() - filemtime('./static.shtml')) 300) { //這里很簡單,直接把靜態(tài)文件拿過來 require_once('./static.shtml'); }else { //如果不存在這個(gè)靜態(tài)文件,或者這個(gè)靜態(tài)文件的最后修改時(shí)間距離現(xiàn)在已經(jīng)超過了5分鐘,那么就訪問動(dòng)態(tài)獲取數(shù)據(jù)的模板,然后更新static.shtml文件的內(nèi)容 //連接數(shù)據(jù)庫 header('Content-Type:text/html;charset=utf-8'); require_once('./db.php'); $connect = DB::getInstance()->connect(); //執(zhí)行查詢操作 $sql = 'select * from account'; $res = $connect->query($sql); //開啟緩沖區(qū) ob_start(); //ob_get_clean()這個(gè)函數(shù)可以獲取緩沖區(qū)的內(nèi)容并清空,一會我會測試一下ob_get_clean()和ob_get_contents()的 require_once('./static_show.php'); //把緩沖區(qū)的內(nèi)容寫入到靜態(tài)文件 file_put_contents('./static.shtml', ob_get_contents()); } ?>
動(dòng)態(tài)展示模板文件static_show.php
?php foreach($res as $row) { echo '名字:'.$row['name'].'br/>'; echo '錢包:'.$row['money'].'br/>'; echo 'hr/>'; } ?>
當(dāng)我們訪問static.php的時(shí)候,因?yàn)闆]有static.shtml,所以會先執(zhí)行else的操作,展示在static_show.php并生成static.shtml文件
如果這時(shí)候我把數(shù)據(jù)庫修改了,zjp的money改為800,然后再訪問static.php會展示什么樣的內(nèi)容呢,沒錯(cuò),zjp的錢包還是600,為什么呢,因?yàn)樗鼒?zhí)行了if中的內(nèi)容,直接顯示了static.shtml,我們可以看一下static.shtml是什么樣的:
如果5分鐘過后再訪問staitc.php呢,會顯示什么呢,沒錯(cuò)!zjp的錢包就變成800了,并且static.shtml的內(nèi)容會更新為zjp的錢包是800。
測試ob_get_clean()和ob_get_contents()
測試方法很簡單:
?php $test = 'Hello World!'; //開啟緩沖區(qū) ob_start(); //測試ob_get_contents() echo $test; echo ob_get_contents(); //輸出結(jié)果:Hello World!Hello World! //測試ob_get_clean() echo $test; echo ob_get_clean(); //輸出結(jié)果:Hello World! echo $test; ob_get_clean(); //輸出結(jié)果: ?>
這樣就可以很清楚的看出來了,當(dāng)我們使用了ob_get_clean()
的時(shí)候,輸出語句并不會輸出任何值,因?yàn)?code>ob_get_clean()會獲取緩沖區(qū)中的內(nèi)容并將緩沖區(qū)清空。所以當(dāng)我們echo test
的時(shí)候并沒有得到test的時(shí)候并沒有得到test的值,echo ob_get_clean()
的時(shí)候卻能夠獲取到值。而當(dāng)我們使用ob_get_contents()
的時(shí)候緩沖區(qū)中的內(nèi)容并沒有被清空。
實(shí)際上,ob_get_clean()
函數(shù)相當(dāng)于執(zhí)行了,ob_get_contents()
和ob_end_clean()
。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。
標(biāo)簽:遼陽 甘肅 梅河口 昭通 涼山 韶關(guān) 十堰 九江
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP單例模式數(shù)據(jù)庫連接類與頁面靜態(tài)化實(shí)現(xiàn)方法》,本文關(guān)鍵詞 PHP,單例,模式,數(shù)據(jù)庫,連接,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。