【问题标题】:PHP: Suppress output within a function?PHP:抑制函数内的输出?
【发布时间】:2010-10-03 22:12:11
【问题描述】:

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

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

我想调用 testFunc() 并在页面中不显示“测试”的情况下获取其返回值。假设这将在 确实 输出其他内容的其他代码的上下文中,是否有这样做的好方法?也许弄乱了输出缓冲区?

【问题讨论】:

    标签: php function output-buffering


    【解决方案1】:

    是的,弄乱Output Buffer 正是答案。只需在调用将输出的方法之前将其打开(不是函数本身,而是在调用它的位置,您可以将其包裹在整个脚本或脚本流中,但您可以通过仅使其尽可能“紧密”将其包裹在方法的调用中):

    function foo() {
      echo "Flush!";
      return true;
    }
    
    ob_start();
    $a = foo();
    ob_end_clean();
    

    并且没有生成任何输出。

    【讨论】:

    • 我很好奇,在这种情况下,如果您之前已经在代码中启动了输出缓冲区会怎样? PHP 会为此函数启动一个新缓冲区,然后仅结束该缓冲区,还是会导致所有先前缓冲的输出也被清除?
    • Power-coder:PHP 会开始一个新的缓冲区,而 ob_end_clean() 调用只会结束最近的缓冲区。 us.php.net/manual/en/function.ob-end-clean.php
    • 谢谢。我正在通过编写自己的替换 ECHO 的函数来重新设计轮子,并根据一些布尔标志禁用..我找到了这个。
    【解决方案2】:

    给你:

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

    “ob”代表“输出缓冲”,请查看此处的手册页:http://www.php.net/outcontrol

    【讨论】:

      【解决方案3】:

      是的,您在利用 PHP 的输出缓冲函数方面是正确的,即 ob_start 和 ob_end_clean(在 php.net 上查找它们):

      <?php
        function testFunc() {
          echo 'Testing';
          return true;
        }
      
          ob_start();
          $output = testFunc();
          ob_end_clean();
      
          echo $output;
      ?>
      

      【讨论】:

        【解决方案4】:

        对你的代码应用一些条件不是那么简单吗?

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

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

        【讨论】:

        • 如果出于测试目的这样做,如果回显语句不重要,那么我认为最好使用输出缓冲区。这样可以避免代码中不必要的逻辑。
        • 是的,我已经使用过它,但是它用测试结构混淆了代码。 . .
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-03
        • 2012-11-09
        • 2023-03-12
        • 1970-01-01
        相关资源
        最近更新 更多