PHP:如何在函数内抑制输出?

39

最简单的方法是抑制函数可能产生的任何输出是什么?比如我有这个:

function testFunc() {
    echo 'Testing';
    return true;
}

我想调用testFunc()并获取其返回值,但不希望"Testing"在页面上显示。假设这将在其他输出其他内容的代码上下文中进行,有没有一个好的方法来实现这个目标?也许通过操作输出缓冲区?

4个回答

75

没错,操作输出缓冲区正是解决方案。只需在调用会输出内容的方法之前开启它(不是函数本身,而是调用它的位置,可以将其包装在整个脚本或脚本流周围,但通过仅将其包装在方法调用周围,可以使其尽可能“紧凑”):

function foo() {
  echo "Flush!";
  return true;
}

ob_start();
$a = foo();
ob_end_clean();

没有生成任何输出。


1
我很好奇,在这种情况下,如果您之前已经在代码中启动了输出缓冲区,会发生什么?PHP会为此函数启动一个新的缓冲区,然后仅结束该缓冲区,还是会清除所有先前缓冲的输出? - Wally Lawless
1
高级编码人员:PHP会启动一个新的缓冲区,而ob_end_clean()调用仅会结束最近的缓冲区。http://us.php.net/manual/zh/function.ob-end-clean.php - Jay
谢谢。我正在重新发明轮子,编写自己的函数来替换ECHO,并根据一些布尔标志禁用它...然后我找到了这个。 - DhruvPathak

12

这就是你需要的:

ob_start();
testFunc();
ob_end_clean();

"ob"代表输出缓冲区,可以查看这里的手册页面:http://www.php.net/outcontrol


4

你的想法是正确的,可以利用PHP的缓冲输出函数,即ob_start和ob_end_clean(在php.net上查找):

<?php
  function testFunc() {
    echo 'Testing';
    return true;
  }

    ob_start();
    $output = testFunc();
    ob_end_clean();

    echo $output;
?>

0

将一些条件应用于您的代码不是很容易吗?

我的意思是,如果变量=测试,则输出,否则不输出?

对于具有直接输出到浏览器的结果的函数(如EVAL),您可以在ob_start中捕获结果。


如果只是为了测试目的,如果回显语句不重要,那么我认为最好使用输出缓冲区。这样可以避免代码中不必要的逻辑。 - unflores
是的,我用过它,但它会在代码中混杂测试结构。 - Dennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接