我有一些课程,我正在编写单元测试,其中有回声。我想抑制此输出,并认为ob_start()
和ob_clean()
就足够了,但它们没有效果。
public function testSomething (){
ob_start();
$class = new MyClass();
$class->method();
ob_clean();
}
我也尝试过诸如ob_start(false, 0, true);
和ob_end_clean()
之类的变体无效。
我错过了什么?
答案 0 :(得分:2)
你可能想要这样的东西
<?php
public function testSomething (){
ob_start();
ob_implicit_flush(false); // turn off implicit flush
// Make your output below
$class = new MyClass();
$class->method();
// End of output
// store output into variable:
$output = ob_get_contents();
}
?>
答案 1 :(得分:0)
你的PHP ini中有implicit_flush设置为true
吗?这可能会导致您看到的行为,因为它告诉PHP告诉输出层在每个输出块后自动刷新自身。这相当于在每次调用print()或echo()以及每个HTML块之后调用PHP函数flush()。
答案 2 :(得分:0)
以下内容为我解决了这个问题。在不调用ob_end_clean()的情况下,缓冲区的内容将一直保留到脚本结束(在刷新脚本之前)。
ob_implicit_flush(false);
ob_start();
/*
...
... do something that pushes countent to the output buffer
...
*/
$rendered = ob_get_contents();
ob_end_clean(); // Needed to clear the buffer