2009-04-22 55 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>";