我使用动态函数名称调用函数(类似这样)
$unsafeFunctionName = $_POST['function_name'];
$safeFunctionName = safe($unsafeFunctionName); // custom safe() function
然后我想在函数的返回值周围包装一些xml(如下所示):
// xml header etc already created
$result = "<return_value>" . $safeFunctionName() . "</return_value>";
问题是,有时函数返回一个值,但有时,函数echo是一个值。我想要做的是将回显捕获到一个变量中,但是,我编写的代码需要以任何一种方式工作(意思是,如果函数返回一个值,或者echo是一个字符串)。
不太确定从哪里开始〜任何想法?
答案 0 :(得分:67)
让我先说一下:
小心那个自定义函数调用业务。我假设你知道这有多危险,这就是为什么你要以某种方式清理它。
过去,你想要的是output buffering:
function hello() {
print "Hello World";
}
ob_start();
hello();
$output = ob_get_clean();
print "--" . $output . "--";
(我添加了破折号以表明它最初没有打印)
以上将输出--Hello World--
答案 1 :(得分:13)
ob_start(); //Start output buffer
echo "abc123";
$output = ob_get_contents(); //Grab output
ob_end_clean(); //Discard output buffer
答案 2 :(得分:1)
为了使用输出值(如果存在)或返回值(如果不存在),您只需修改代码如下:
ob_start();
$return_val = $safeFunctionName();
$echo_val = ob_get_clean();
$result = "<return_value>" . (strlen($echo_val) ? $echo_val : $return_val) . "</return_value>";