2013-07-22 18 views
22

這兩段PHP有什麼區別嗎?ob_get_contents + ob_end_clean vs ob_get_clean

ob_start(); 
//code... 
$pageContent = ob_get_contents(); 
ob_end_clean(); 
someFunction($pageContent); 

VS

ob_start(); 
//code... 
$pageContent=ob_get_clean(); 
someFunction($pageContent); 

我目前使用的第一個塊,但我想用第二個代替,如果它在功能上等同,因爲它更簡潔一點。

回答

22

要回答你的問題:

ob_get_clean()基本上是執行雙方ob_get_contents()和ob_end_clean()。

是的。它在功能上等同。


情況1:

ob_get_contents() + ob_end_clean()

ob_get_contents - 返回的輸出緩衝區

ob_end_clean的內容 - 清潔(擦除)的輸出緩衝區,並轉關輸出緩衝

因此,基本上,您將輸出緩衝區的內容存儲到變量中,然後使用ob_end_clean()進行清除。

案例2:

ob_get_clean - 獲取當前緩衝區的內容,並刪除

要存儲的緩存內容保存到一個變量,然後輸出緩衝區被刪除的電流輸出緩衝區。


你在做什麼基本上是一樣的。所以,在這裏使用第二個代碼塊沒有看到任何問題,因爲它們都在做同樣的事情。

+2

謝謝!我認爲它是一樣的,只是要確保我不會無意中在幕後改變一些特別的事情。 – chiliNUT

+0

@TimMalone:謝謝,更新。 –

7

ob_get_contents()可用於繼續輸出緩衝。

例子:

ob_start(); 
echo 'Something!'; 
$html1 = ob_get_contents(); 
echo 'More to say!'; 
$html2 = ob_get_contents(); 
ob_end_clean(); 

在結束時,經銷商也有這樣的內容:

$html1 = 'Something!'; 
$html2 = 'Something!More to say!'; 
-1

ob_get_clean()函數執行兩個ob_get_contents()ob_end_clean()

功能相同ob_get_contents() + ob_end_clean()ob_get_clean()返回輸出緩衝器和輸出端緩衝的內容。如果輸出緩衝未激活,則返回FALSE

3

$stuff = ob_get_clean(); 

$stuff = ob_get_contents(); 
ob_end_clean(); 

是後者將拋出一個E_NOTICE如果在您調用它的時候沒有主動輸出緩衝器,以及之間的一個極小的差異前者不會。實際上,投放通知似乎對我更爲理智,因爲如果您在沒有輸出緩衝區的情況下調用這些函數,那麼您可能做錯了某些事情!

這兩種方法是幾乎等同是explicitly documented on php.net,它說:

ob_get_clean()基本上執行兩個ob_get_contents()ob_end_clean()

ob_end_clean警告投擲行爲是also documented

如果失敗就產生E_NOTICE

請注意,文檔ob_get_contentsob_end_clean中沒有類似的句子。

如果您確實想確保這些功能(沒有)之間沒有進一步的區別,您可以深入探討源中的ob_get_contentsob_end_cleanob_get_clean的定義。對於ob_get_clean中不可能達到的不可能的情況,有一些奇怪的錯誤處理應該永遠不會達到,但除此之外,您可以看到這些行爲如所述。

相關問題