【问题标题】:get return from echo从回声中获得回报
【发布时间】:2011-11-23 17:34:42
【问题描述】:

我正在使用echo 输出的一些函数。但我需要他们的return,所以我可以在 PHP 中使用它们。

这行得通(似乎没有问题)但我想知道,有没有更好的方法?

    function getEcho( $function ) {
        $getEcho = '';
        ob_start();
        $function;
        $getEcho = ob_get_clean();
        return $getEcho;
    }

示例:

    //some echo function
    function myEcho() {
        echo '1';
    }

    //use getEcho to store echo as variable
    $myvar = getEcho(myEcho());      // '1'

【问题讨论】:

  • 有,使用搜索。顺便说一句,使用直接输出任何数据的函数被认为是不好的风格。
  • 这是我目前找到的唯一方法。
  • @str:有一些内置函数无法更改,并且可以直接输出数据(例如 var_dump)。但对于自写函数,你是对的。
  • @str Thx / 当您说“输出”时,您是指返回还是回显?
  • @oezi 我知道,但这不应该适应你自己的功能(只是说)。 ryanve:我的意思是呼应和“没有”而不是“有”。

标签: php return echo output-buffering


【解决方案1】:

不,我能想到的唯一方法是“捕获”它以使用输出缓冲,就像你已经做的那样。我在我的代码中使用了一个非常相似的函数:

function return_echo($func) {
    ob_start();
    $func;
    return ob_get_clean();
}

它只短了 2 行,并且完全一样。

【讨论】:

  • @NikiC 您的编辑不正确。中间线需要是 $func; 没有括号。否则会导致错误。
  • 谢谢——这应该可以避免下一个发现这个问题的人因困惑而发疯。 ;)
  • 嗯?但是$func; 应该做什么?它只是一个变量查找,它本身什么都不做。 $func(); 会调用传入的函数。
  • @ryanve 你搞错了。 $func = some_callback() 只会将来自some_callback() 的返回值存储在$func 中。如果要将函数存储为回调,则需要编写 $func = 'someCallback' 并使用 $func 调用它。 PS:您的初始代码将不起作用,因为在getEcho(myEcho()); myEcho() 只会执行它的回显,并且只有在此之后才会执行getEcho()。你需要做的是getEcho('myEcho')(结合$func())。
  • @ryanve 在这种情况下,您需要围绕它创建一个闭包,即getEcho(function() { someFunc('arg1', 'arg2', ...); });。正如您所看到的,问题变得非常复杂,因此通常最好的选择是重新设计您的函数以仅返回而不是直接回显。
【解决方案2】:

您的第一个代码是正确的。不过可以缩短。

  function getEcho($function) {
        ob_start();
        $function;
        return ob_get_clean();
    }
    echo getEcho($function);

【讨论】:

    【解决方案3】:

    你的第一段代码是唯一的方法。

    【讨论】:

      【解决方案4】:

      这些函数是你写的吗?您可以通过 3 种方式:

      1. 使用包装器通过输出缓冲进行捕获。
      2. 额外的函数调用集,wordpress 风格,以便“somefunc()”直接输出,而“get_somefunc()”返回输出
      3. 向函数添加一个额外的参数以指示它们是否应该输出或返回,就像print_r()'s 标志一样。

      【讨论】:

      • 我需要使用它的函数是我没有编写的——它们要么来自没有 get_ 版本的 WordPress,要么来自themehybrid.com/hybrid-core
      猜你喜欢
      • 1970-01-01
      • 2021-03-26
      • 2021-09-25
      • 2018-08-27
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2018-04-26
      相关资源
      最近更新 更多