Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: ZHOSS-9 en 22 Diciembre 2011, 01:06 am



Título: Salidas de una función
Publicado por: ZHOSS-9 en 22 Diciembre 2011, 01:06 am
Hay algo que siempre me ha llevado de cabeza y no entiendo. Yo he hecho funciones, sencillas.. pero funciones al fin y al cabo. El problema viene en que no sé cuando le tengo que asignar una salida, es decir:

Código
  1. function holaMundo() {
  2.        echo "Hola mundo";
  3. }

Ahí, el contenido del parentesis está vacio, y el resultado será el echo..

Sin embargo, aquí un ejemplo más complejo:

Código
  1. function fetch_replaced_session_url($url)
  2. {
  3. global $yrya;
  4.  
  5. $url = addslashes($url);
  6. $url = fetch_removed_sessionhash($url);
  7.  
  8. if ($yrya->session->vars['sessionurl'] != '')
  9. {
  10. if (strpos($url, '?') !== false)
  11. {
  12. $url .= '&' . $yrya->session->vars['sessionurl'];
  13. }
  14. else
  15. {
  16. $url .= '?' . $yrya->session->vars['sessionurl'];
  17. }
  18. }
  19.  
  20. return $url;
  21. }

¿Por qué se pide retornar $url? ¿Es decir, por qué es más útil retornarlo.. a qué se debe, qué hace? ¿No sirve igual guardarlo en una variable o algo parecido?

Un saludo y gracias por adelantado.


Título: Re: Salidas de una función
Publicado por: dark_sargon en 22 Diciembre 2011, 17:27 pm
Código
  1. <?php
  2.  
  3.  echo "El resultado de sumar 5 y 6 es ";
  4.  echo sumador(5,6); //Llamada a la función
  5.  
  6.  function sumador($num1,$num2){
  7.    $resultado = $num1 + $num2;
  8.    return $resultado;
  9.  }
  10.  
  11. ?>

Con return, se hace la suma y la misma llamada a la función toma el valor del resultado. Sin el return solo se hace la suma.


Título: Re: Salidas de una función
Publicado por: ZHOSS-9 en 22 Diciembre 2011, 20:01 pm
Pero sigo sin pillarlo.. retorna el valor de la suma, vale.
Aun así si pusieras

Código
  1.  function sumador(){
  2.    $num1 = 5;
  3.    $num2 = 6;
  4.    $resultado = $num1 + $num2;
  5. }
  6.  
  7.   sumador();
  8.   echo $resultado;

¿no haría lo mismo? ¿o me estoy equivocando?
Porque el resultado ya lo estás guardando en una variable, entonces el sentido de tener que guardarlo en el retorno de la función es lo que  no entiendo.. ¿daría igual hacerlo de las dos formas o guardarlo ahí tiene ventajas?


Título: Re: Salidas de una función
Publicado por: dark_sargon en 22 Diciembre 2011, 21:47 pm
No es correcto ya que la variable $resultado no puede ser usada por fuera de la función sumador(), es decir la variable $resultado de la función es diferente a la variable $resultado fuera de la función.

Otra cosa es que si asignas los valores de $num1 y $num2 dentro de la función, esta quedará inservible para otros valores diferentes a 5 y 6.

Suponiendo que tu script debe hacer 100 sumas, del modo que lo estás haciendo, tendrías que hacer 100 funciones mientras que usando bien las características de una función, bastaría con una sola.

Aclaro que sería posible hacerlo con el código que haz publicado pero debes hacer global la variable $resulado para poder usarla afuera:
Código
  1. <?php
  2.  
  3. function sumador(){
  4.   $num1 = 5;
  5.   $num2 = 6;
  6.   global $resultado;
  7.   $resultado = $num1 + $num2;
  8. }
  9.  
  10.  sumador();
  11.  echo $resultado;
  12.  
  13. ?>

Como te digo, sería mejor dejar variables las entradas de la función:
Código
  1. <?php
  2.  
  3. function sumador($num1, $num2){
  4.   return $resultado = $num1 + $num2;
  5. }
  6.  
  7.  echo sumador(5,6);
  8.  
  9. ?>


Título: Re: Salidas de una función
Publicado por: ZHOSS-9 en 22 Diciembre 2011, 22:33 pm
Ahora edito este mensaje, que me he confundido de tema y me creia que estaba respndiendo a otro !
Voy a probar lo que has dicho dark, pero me has ayudado mucho! Muchas gracias!