我看看PHP - Laravel 框架源代码,在他们的error.php文件中,我找到了这一行。
**ob_get_level() and ob_end_clean();**
只是想知道上面代码的目的是什么?
的问候,
anru
答案 0 :(得分:5)
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();
}
答案 1 :(得分:1)
这意味着“如果某些东西已经缓冲 - 清除缓冲区”
同样可以写成
if (ob_get_level()) {
ob_end_clean();
}
答案 2 :(得分:1)
“如果ob_get_level()
返回'truthy'值(不是0但更高),则输出缓冲区处于活动状态,让它结束并丢弃它的内容。”
通常,你知道你开始使用输出缓冲区。在框架中,您不知道用户可能对缓冲区执行的操作,因此请首先检查活动缓冲区。