php - php输出缓冲,分层?

  显示原文与译文双语对照的内容

PHP中的输出缓冲很有趣。 它简化了许多东西。我在脚本顶部使用 ob_start(),底部是 ob_get_clean() ( 或者其他任何函数) 。

这两个调用之间有可能再次调用这些函数,而不会干扰父调用。

这里类型的代码有效? ( 它很正常,但是。) 这习惯好?


<?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_start() 处于活动状态时,你可以调用 ob_start() 。 请确保你调用 ob_end_flush()的次数合适。 如果多个输出回调函数处于活动状态,则输出将通过嵌套顺序按顺序筛选。

因此,假设 ob_end/get 将结束/返回匹配的ob_start e.g.,这是完全有效的:


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_get_clean() 调用,因此这些函数的使用对"父级" ob_start() 是完全透明的。 如果对( 调用 ob_start() 和 ob_get_clean ( ) 与--不匹配,它将是一个恶意的习惯,但它不应该是( and',因为它不会出现任何问题。

...