下面小編就為大家分享一篇php利用ob_start()清除輸出和選擇性輸出的方法,具有很好的參考價值,希望對大家有所協助。一起跟隨小編過來看看吧
一、背景
有一段代碼,因為調用了封裝的方法,所以會有一些本來不需要的傳回值。這些傳回值該怎麼處理才能讓它消失呢。有的人會說,清除變數不就好了嗎?但假如這個傳回值無法清除,那又該怎麼辦呢?
二、ob_start()
1、概念:
此函數將開啟輸出緩衝。當輸出緩衝啟用後,指令碼將不會輸出內容(除http標題外),相反需要輸出的內容被儲存在內部緩衝區中。
內部緩衝區的內容可以用 ob_get_contents() 函數複製到一個字串變數中。 想要輸出儲存在內部緩衝區中的內容,可以使用 ob_end_flush() 函數。另外, 使用 ob_end_clean() 函數會靜默丟棄掉緩衝區的內容。
來自php手冊:http://php.net/manual/zh/function.ob-start.php
2、緩衝區的基本用法
//開啟緩衝區ob_start();//清除緩衝區中的內容ob_clean();//沖刷出(送出)輸出緩衝區內容並關閉緩衝ob_end_flush();
三、基本的測試
1、
echo '1';ob_start();echo '2';ob_clean();
結果: 1
解釋:這是最簡單的用法,那就是給不想輸出內容的外面加上ob_start();,然後再清除緩衝區中的內容,這樣就實現了咱們的使用情境。我們可以選擇性的輸出自己想輸出的。去掉自己不想輸出的。
2、
echo '1';ob_start();echo '2';//輸出緩衝區ob_end_flush();
結果: 12
3、
//開啟緩衝區ob_start();echo '1';//清除緩衝區,此時不會輸出1ob_clean();//輸出緩衝區。但是因為上面已經清除過緩衝區了,所以不會輸出 1ob_end_flush();echo '2';
結果: 2
4、
ob_start(); //開啟緩衝區echo '1'; $a = ob_get_contents(); //輸出緩衝區內容到$a,相當於賦值給$aob_clean(); //這裡清除緩衝區內容echo '2'; //輸出2echo $a; //輸出$a
結果: 2 1
解釋:這裡的ob_get_contents();是擷取緩衝區的內容。我們可以把擷取的內容賦值給一個變數,這樣,就算清除了緩衝區,我們輸出變數,還是可以正常的輸出1的。
四、常用的地方
該函數常用與頁面靜態化,構造微型web架構能起到很關鍵的作用,講渲染好的頁面通過輸入緩衝的方式直接寫入到一個檔案,這樣判斷該檔案是否存在即可實現使用者本次訪問需不需要去重新渲染一個頁面,也可應用到大型項目中,用nosql去儲存渲染好的頁面,具體使用方法應人而異,看您喜歡哪種
上面就是我自己做的簡單測試。大家有需要的話,可以對照著php手冊,多做一些測試。
您可能感興趣的文章:
PHP實現合并兩個排序鏈表的方法講解
php實現的mongoDB單例模式操作類的相關講解
tp5(thinkPHP5)操作mongoDB資料庫的方法詳解