2009-04-22 9 views
19

Estoy llamando a funciones utilizando nombres de las funciones dinámicas (algo así)captura de eco en una variable

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

Entonces estoy queriendo poner algunas cosas xml todo el valor devuelto de la función (algo así):

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

El problema es que a veces la función devuelve un valor, pero a veces, la función eco es un valor. Lo que quiero hacer es capturar ese eco en una variable, pero el código que escribo debería funcionar de cualquier manera (es decir, si la función devuelve un valor, o el eco es una cadena).

No estoy seguro por dónde empezar ~ alguna idea?

Respuesta

52

Permítanme aclarar esto diciendo: Tenga cuidado con esa función personalizada de llamadas comerciales. Supongo que sabes lo peligroso que puede ser y por eso lo estás limpiando de alguna manera.

Más allá de eso, lo que quiere que se conoce como output buffering:

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

(I añaden los guiones para mostrar que no está siendo impreso en un primer momento) de salida

Lo anterior --Hello mundo--

+0

Sólo un punto menor, sabe usted acerca del método ob_get_clean? –

+0

Cualquiera de los dos funcionaría bien aquí, ¿no? –

+0

perfecto - gracias! – 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

para utilizar º valor de salida de correo, si está presente, o el valor de retorno si no, simplemente podría modificar el código de la siguiente manera:

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