我正在查看 PHP - Laravel框架源代码,在它们的 error.php 文件中,我找到了这一行。
**ob_get_level() and ob_end_clean();**
只是想知道上面代码的目的是什么?
问候,
安茹
我正在查看 PHP - Laravel框架源代码,在它们的 error.php 文件中,我找到了这一行。
**ob_get_level() and ob_end_clean();**
只是想知道上面代码的目的是什么?
问候,
安茹
PHP 有一个称为输出缓冲的特性。实现时,echo、print 或其他任何内容的输出将被缓冲,而不是直接进入 php 的输出。如果您需要在之后分析输出,甚至将其丢弃,这将非常有用。
正常使用可能类似于以下:
ob_start();
echo "bla bla ...";
// ... more code
// grab contents of the output buffer
$content = ob_get_contents();
// 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 而是更高),则输出缓冲区处于活动状态,让我们结束它并丢弃它的内容。”
通常,您会知道您从输出缓冲区开始。在框架中,您不知道您的用户可能会对缓冲区做什么,所以首先检查一个活动的缓冲区。