我看PHP - Laravel框架的源代碼,在他們的error.php文件中,我已經找到了這一行。PHP和ob_end_clean函數
**ob_get_level() and ob_end_clean();**
只想知道以上代碼的目的是什麼?
問候,
anru
我看PHP - Laravel框架的源代碼,在他們的error.php文件中,我已經找到了這一行。PHP和ob_end_clean函數
**ob_get_level() and ob_end_clean();**
只想知道以上代碼的目的是什麼?
問候,
anru
PHP有一個名爲output buffering的功能。這意味着echo和print或者其他輸出不會直接傳遞到php的輸出,它將被緩衝。如果您需要事後分析輸出或事件將其丟棄,這非常有用。
通常你的方式使用這樣的:
ob_start();
echo "bla bla ...";
// ... more code
// grab contents of the output buffer
$content = ob_get_contens();
// analyze it ...
if(content_looks_good($content)) {
ob_end_flush();
} else {
echo "bad content";
ob_end_clean(); // throw buffer contents away
}
然而,這只是一個例子。有更多的使用示例用於輸出緩衝。
您顯示的代碼只是拋出緩衝區內容。我不知道原因,因爲我不知道你引用了哪些代碼。
語法的說明:
ob_get_level()
將返回輸出緩衝區的當前嵌套級別。如果它大於零,php將使用該值作爲布爾值true,因此執行ob_end_clean()
清除緩衝區的內容。
它同下面的語句,什麼可能是更好地理解:
if(ob_get_level() > 0) {
ob_end_clean();
}
這意味着 「如果事情已經緩衝 - 清除緩衝區」
同樣可以寫成
if (ob_get_level()) {
ob_end_clean();
}
「如果ob_get_level()
回報'truthy'的值(不是0但是更高),輸出緩衝區有效,讓我們結束它&丟棄它的內容。「
通常情況下,你會知道你開始輸出緩衝區。在框架中,你不知道你的用戶可能對緩衝區做什麼,所以首先檢查一下活動的。
RTM的[ob_get_level()](http://php.net/manual/en/function.ob-get -level.php)&[ob_end_clean()](http://php.net/manual/en/function.ob-end-clean.php) – 2013-04-23 23:56:45
也許檢查手冊? – 2013-04-23 23:56:46
這個傢伙給我一個「 - 」,你真的讀過我的問題嗎?我要求代碼的'目的',而不是'功能'的含義。 – anru 2013-04-24 00:18:55