将回声捕获到变量中

43

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

$unsafeFunctionName = $_POST['function_name'];
$safeFunctionName   = safe($unsafeFunctionName); // custom safe() function
然后我想要在函数返回的值周围包装一些XML(类似这样):
// xml header etc already created
$result = "<return_value>" . $safeFunctionName() . "</return_value>";

问题是,有时函数会返回一个值,但有时它回显一个值。我想做的是将那个回显捕获到一个变量中,但我编写的代码需要以两种方式工作(即,如果函数返回一个值或回显一个字符串)。

不太确定从哪里开始~ 有什么想法吗?

3个回答

91

首先声明:

小心使用自定义函数调用。我假设你知道这可能有多危险,所以你会以某种方式对其进行清理。

除此之外,您想要的是所谓的输出缓冲

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

(我添加了横线以显示它一开始没有被打印)

上述代码将输出--Hello World--


只是一个小细节,你知道 ob_get_clean 方法吗? - Jon Benedicto

17

PHP: ob_get_contents

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

2
为了使用输出值(如果存在)或返回值(如果不存在),您可以简单地修改代码如下:
ob_start();
$return_val = $safeFunctionName();
$echo_val = ob_get_clean();
$result = "<return_value>" . (strlen($echo_val) ? $echo_val : $return_val) . "</return_value>";

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