Php 输出缓冲,分层?
PHP中的输出缓冲很有趣。它简化了许多事情。我在脚本顶部使用ob_start(),在底部使用ob_get_clean()(或任何其他函数) 在这两个调用之间,可以再次调用这些函数,而不会干扰父调用 这类代码有效吗?(很好,但是…)这是个好习惯吗Php 输出缓冲,分层?,php,apache,output-buffering,Php,Apache,Output Buffering,PHP中的输出缓冲很有趣。它简化了许多事情。我在脚本顶部使用ob_start(),在底部使用ob_get_clean()(或任何其他函数) 在这两个调用之间,可以再次调用这些函数,而不会干扰父调用 这类代码有效吗?(很好,但是…)这是个好习惯吗 <?php ob_start(); //NOTICE !!! echo '<p>echos of the top of the script</p>'; echo GetSomeOtherData(true); echo
<?php
ob_start(); //NOTICE !!!
echo '<p>echos of the top of the script</p>';
echo GetSomeOtherData(true);
echo '<p>echos after GetSomeOtherData()</p>';
$data = ob_get_clean(); //NOTICE !!!
echo $data;
//just a function to return something, with the help of output buffering
function GetSomeOtherData($toReturn)
{
ob_start(); //NOTICE !!!
echo '<p>This has been rendered inside a function</p>';
$function_data = ob_get_clean(); //NOTICE !!!
if($toReturn===true)
{
return $function_data;
}
else
{
//may be an error | return something else
return '<p>An Error</p>';
}
}
?>
老实说,我看这没什么问题。对ob_start()的每个调用都与ob_get_clean()调用匹配,因此此类函数的使用对“父”ob_start()完全透明。如果成对(对ob_start()和ob_get_clean()的调用)不匹配,这将是一个可怕的习惯——但只要它们匹配,就不会(也不会)给您带来任何麻烦。手册: 输出缓冲区是可堆叠的,也就是说,您可以在 另一个ob_start()处于活动状态。你一定要打电话 ob_end_flush()正确的次数。如果有多个输出 回调函数处于活动状态,正在按顺序筛选输出 按嵌套顺序通过它们中的每一个 因此,假设
ob_end/get
将结束/返回匹配的ob_start
是完全有效的,例如:
ob_start();
echo "<div class=outer>";
ob_start();
echo "<div class=inner></div>";
$inner = ob_get_clean(); // <div class=inner></div>
echo "</div>";
$outer = ob_get_clean(); // <div class=outer></div>
ob_start();
回声“;
ob_start();
回声“;
$inner=ob_get_clean();//
回声“;
$outer=ob_get_clean();//