2009-04-22 6 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が値を返すことがあることがあります。私がしたいのは、エコーを変数に取り込むことですが、私が書いたコードはどちらの方法でも動作する必要があります(関数が値を返すか、エコーが文字列かどうかを意味します)。

どこから始めるべきかわからないのですか?

答えて

52

私はこう言っています。カスタム関数呼び出しビジネスには注意してください。私はあなたがそれが何とか危険なことを知っていると仮定しています。なぜなら、何とかそれを掃除しているからです。その過去

、何が欲しいのはoutput bufferingとして知られています:

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

(私はそれが最初に印刷されていない表示するためのダッシュを追加しました)

上記の意志出力--Hello World--目を使用するために

+0

ob_get_cleanメソッドについて知っていますか? –

+0

どちらもうまくいくでしょうか? –

+0

完璧 - ありがとう! – OneNerd

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

e出力値がある場合はそれを返し、そうでない場合は戻り値を返します。

ob_start(); 
$return_val = $safeFunctionName(); 
$echo_val = ob_get_clean(); 
$result = "<return_value>" . (strlen($echo_val) ? $echo_val : $return_val) . "</return_value>"; 
関連する問題