Foros del Web » Programando para Internet » PHP »

Funcion que devuelve un entero y cadena por referencia

Estas en el tema de Funcion que devuelve un entero y cadena por referencia en el foro de PHP en Foros del Web. Hola, estoy haciendo una función que va incluida dentro de otras 3 funciones y necesito ir guardando los mensajes que producen y textos en una ...
  #1 (permalink)  
Antiguo 12/01/2008, 22:25
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Funcion que devuelve un entero y cadena por referencia

Hola, estoy haciendo una función que va incluida dentro de otras 3 funciones y necesito ir guardando los mensajes que producen y textos en una variable de PHP y que además se devuelvan los valores correspondientes de la función, me explico:

Código PHP:
<?
//Función pequeña
function pequeña($peso,$edad)
{
    
$valor=$peso/$edad;
    
$output.='Su relacion peso/edad es:'.$valor// Esta variable necesito que se guarde con los otros mensajes de output
    
return $valor;
}
//Tengo una función grande
function grande($nombre,$peso,$talla,$edad)
{
    
//Aquí se juega con los parámetros y se producen salidas que guardo en una variable
    
$ouput='Su nombre es '.$nombre.'<br>';
    
$relacion=$talla/$peso;
    
$ouput.='Su relación talla/peso es:'.$relacion;

    
//Después se llaman a otras funciones que devolverán datos, pero además necesito guardar las cadenas de mensajes que producen, por ejemplo
   
$relacion2=pequeña($peso,$edad);//Necesito que el valor se guarde, pero además se guarde en $output el mensaje que produce
}

grande('shakaran',80,180,20);//Llamada a la funcion inicial
?>
He pensado en variables globales con "global" pero no se como utilizarlas y si valdrían y también he pensado devolver arrays, pero entonces seria algo "sucio" porque luego tendría que estar guardando la primera posición para el valor y la segunda para la salida.

A ver si a alguien se le ha presentado un problema similar o sabe resolver este (obviamente es un pequeño ejemplo que me he inventado, pero en mi código es de aplicación similar).
Gracias
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #2 (permalink)  
Antiguo 12/01/2008, 22:39
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Funcion que devuelve un entero y cadena por referencia

Pues si, tienes razón, la solución más sencilla es usando variables globales:

Código PHP:
//Función pequeña 
function pequeña($peso,$edad

    global 
$output;
    
$valor=$peso/$edad
    
$output.='Su relacion peso/edad es:'.$valor// Esta variable necesito que se guarde con los otros mensajes de output 
    
return $valor

//Tengo una función grande 
function grande($nombre,$peso,$talla,$edad

    global 
$output;
    
//Aquí se juega con los parámetros y se producen salidas que guardo en una variable 
    
$ouput='Su nombre es '.$nombre.'<br>'
    
$relacion=$talla/$peso
    
$ouput.='Su relación talla/peso es:'.$relacion

    
//Después se llaman a otras funciones que devolverán datos, pero además necesito guardar las cadenas de mensajes que producen, por ejemplo 
   
$relacion2=pequeña($peso,$edad);//Necesito que el valor se guarde, pero además se guarde en $output el mensaje que produce 


grande('shakaran',80,180,20);//Llamada a la funcion inicial 
http://www.php.net/global

Un saludo,
  #3 (permalink)  
Antiguo 13/01/2008, 04:57
 
Fecha de Ingreso: enero-2008
Ubicación: Madrid
Mensajes: 32
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: Funcion que devuelve un entero y cadena por referencia

Yo es que le tengo un poco de no-se-qué a las variables globales.

Por si te interesa, puedes hacer que el $output de la función pequeña() se retorne por referencia. Algo como:
Código PHP:
// Declaración
//Función pequeña 
function pequeña($peso,$edad, &$output

    
$valor=$peso/$edad
    
$output.='Su relacion peso/edad es:'.$valor// Esta variable necesito que se guarde con los otros mensajes de output 
    
return $valor
}

function 
grande($nombre,$peso,$talla,$edad)
{
    
//Aquí se juega con los parámetros y se producen salidas que guardo en una variable
    
$ouput='Su nombre es '.$nombre.'<br>';
    
$relacion=$talla/$peso;
    
$ouput.='Su relación talla/peso es:'.$relacion;

    
//Después se llaman a otras funciones que devolverán datos, pero además necesito guardar las cadenas de mensajes que producen, por ejemplo
   
$relacion2=pequeña($peso,$edad$output);//Necesito que el valor se guarde, pero además se guarde en $output el mensaje que produce

Y al final de la llamada de la función grande() el valor de $output será el concatenado.

Otra alternativa es que tu función pequeña() retorne un Array asociativo:
Código PHP:
// Declaración
//Función pequeña 
function pequeña($peso,$edad

    
$valor=$peso/$edad
    
$output.='Su relacion peso/edad es:'.$valor// Esta variable necesito que se guarde con los otros mensajes de output 
    
return array('valor' => $valor'output' => $output);

Espero te sirvan estas alternativas
  #4 (permalink)  
Antiguo 13/01/2008, 12:36
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Re: Funcion que devuelve un entero y cadena por referencia

Okram, precisamente estaba evitando usar variables globales (incrementan el coste de tiempo del script y se hace mas ineficiente ya que esta función la utilizo muchas veces).

_kai_ la solución por referencia es la que estaba buscando, o sabia que el operador & se podía utilizar también en PHP. La del array asociativo es la solución "no limpia" que no quería usar, ya que luego hay que desmontar el array y coger las posiciones que se interesan y el return no es por así decirlo "directo".

Muchas gracias a ambos.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:05.