【问题标题】:capturing echo into a variable将回声捕获到变量中
【发布时间】:2010-10-21 04:05:21
【问题描述】:

我正在使用动态函数名(类似这样)调用函数

$unsafeFunctionName = $_POST['function_name'];
$safeFunctionName   = safe($unsafeFunctionName); // custom safe() function

然后我想在函数的返回值周围包装一些 xml(类似这样):

// xml header etc already created
$result = "<return_value>" . $safeFunctionName() . "</return_value>";

问题是,有时函数返回一个值,但有时,函数 echo 是一个值。我想要做的是将该回显捕获到一个变量中,但是,我编写的代码需要以任何一种方式工作(意思是,如果函数返回一个值,或者回显是一个字符串)。

不太清楚从哪里开始~有什么想法吗?

【问题讨论】:

    标签: php


    【解决方案1】:

    让我先说:

    小心那个自定义函数调用业务。我假设您知道这有多危险,这就是您以某种方式对其进行清洁的原因。

    过去,你想要的是output buffering

    function hello() {
        print "Hello World";
    }
    ob_start();
    hello();
    $output = ob_get_clean();
    print "--" . $output . "--";
    

    (我添加了破折号以表明它最初没有被打印)

    上面会输出--Hello World--

    【讨论】:

    • 小题大做,你知道ob_get_clean方法吗?
    【解决方案2】:

    PHP: ob_get_contents

    ob_start(); //Start output buffer
    echo "abc123";
    $output = ob_get_contents(); //Grab output
    ob_end_clean(); //Discard output buffer
    

    【讨论】:

      【解决方案3】:

      为了使用输出值(如果存在)或返回值(如果不存在),您可以像这样简单地修改您的代码:

      ob_start();
      $return_val = $safeFunctionName();
      $echo_val = ob_get_clean();
      $result = "<return_value>" . (strlen($echo_val) ? $echo_val : $return_val) . "</return_value>";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-10
        • 1970-01-01
        • 1970-01-01
        • 2010-09-15
        • 2010-10-11
        • 2018-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多