2009-04-22 17 views
19

sto funzioni di chiamata utilizzando i nomi delle funzioni dinamiche (qualcosa di simile)catturare l'eco in una variabile

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

Poi Sono voler avvolgere qualche xml attorno al valore restituito della funzione (qualcosa di simile):

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

Il problema è che a volte la funzione restituisce un valore, ma a volte la funzione echo è un valore. Quello che voglio fare è catturare quell'eco in una variabile, ma, il codice che scrivo dovrebbe funzionare in entrambi i modi (cioè, se la funzione restituisce un valore, o echo è una stringa).

Non sapete da dove iniziare ~ qualche idea?

risposta

52

Lasciatemi prefigurare ciò dicendo: Prestare attenzione a questa funzione personalizzata che chiama business. Suppongo che tu sappia quanto questo possa essere pericoloso, ed è per questo che lo stai pulendo in qualche modo.

Passato che, ciò che si vuole è conosciuto come output buffering:

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

(ho aggiunto i trattini per dimostrare che non è in fase di stampa in un primo momento) Uscita

È possibile che questo volontà --Hello World--

+0

Solo un punto secondario, sai del metodo ob_get_clean? –

+0

O funzionerebbe bene qui, no? –

+0

perfetto - grazie! – 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

per poter utilizzare esimo Il valore di output, se presente, o il valore restituito in caso contrario, è possibile semplicemente modificare il codice in questo modo:

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