2009-04-22 57 views
19

我使用动态函数名称调用函数(像这样)捕捉回声到一个变量

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

那么我想环绕函数的返回值一些XML(像这样):

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

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

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

回答

52

让我先说一句:小心这个自定义函数调用业务。我假设你知道这可能会有多危险,这就是为什么你要以某种方式清理它。

过去,你想要的东西被称为output buffering

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

(我加破折号表明它没有被印刷在第一)

上面会输出 - 你好天下 -

+0

只是一个小点,你知道的ob_get_clean方法? – 2009-04-22 17:40:28

8

PHP: ob_get_contents

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

为了使用第Ë产值,如果存在的话,或者返回值,如果没有,你可以简单地修改你的代码是这样的:

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