Foros del Web » Programando para Internet » PHP »

Dudas sobre parámetros de funciones

Estas en el tema de Dudas sobre parámetros de funciones en el foro de PHP en Foros del Web. Estuve probando algunos ejemplos que se proponen en un artículo de www.desarrolloweb.com para el paso de parámetros, y me asalta una duda. Siendo bien preciso ...
  #1 (permalink)  
Antiguo 30/03/2011, 18:52
 
Fecha de Ingreso: abril-2010
Ubicación: Calama
Mensajes: 58
Antigüedad: 14 años
Puntos: 0
Pregunta Dudas sobre parámetros de funciones

Estuve probando algunos ejemplos que se proponen en un artículo de www.desarrolloweb.com para el paso de parámetros, y me asalta una duda. Siendo bien preciso y simplista, se supone que pasando los parámetros por valor, el valor del parámetro no cambia cuando se llama a la función. En cambio, si pasamos los parámetros por referencia, el valor sí debería cambiar. Es decir (al modo como lo entiendo yo), cuando se pasa por valor, la función devuelve la $variable contenida dentro de la misma; y cuando se pasa por referencia, devuelve la $variable que está fuera de la función.

Pero resulta que, viendo los ejemplos del artículo, el resultado es el mismo tanto si se pasan los parámetros por valor o por referencia. Me explico con los siguientes códigos:

PARÁMETROS POR VALOR:
Código PHP:
Ver original
  1. function prueba1($variable_interna) {
  2.     $variable_interna="Variable dentro de la función";
  3.     return $variable_interna;
  4. }
  5. $variable_externa="Variable fuera de la función";
  6. echo "<p>resultado= ".prueba1($variable_externa)."</p>";


PARÁMETROS POR REFERENCIA:

Código PHP:
Ver original
  1. function prueba2(&$otra_variable_interna)   {
  2.     $otra_variable_interna="Variable dentro de la función";
  3.     return $otra_variable_interna;
  4. }
  5. $otra_variable_externa="Variable fuera de la función";
  6. echo "<p>resultado= ".prueba2($otra_variable_externa)."</p>";

Tanto el primer como el segundo ejemplo devuelven la variable contenida dentro de la función, siendo que los parámetros de ambas son pasadas de diferentes maneras.

¿Cuál entonces es el sentido de usar una u otra forma (por valor o por referencia) si ambas devuelven la variable contenida dentro de la función?

Seguramente algo se me escapa; puede que esté equivocado y no haya entendido bien el asunto. Quisiera me ayuden a entenderlo, por favor.
  #2 (permalink)  
Antiguo 30/03/2011, 19:00
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Dudas sobre parámetros de funciones

lo que pasa es que estás imprimiendo el retorno de la función y no la variable:

Código PHP:
Ver original
  1. function prueba2(&$otra_variable_interna)   {
  2.         $otra_variable_interna="Variable dentro de la función";
  3.         return $otra_variable_interna;
  4.     }
  5.     $otra_variable_externa="Variable fuera de la función";
  6.     echo "<p>retorno= ".prueba2($otra_variable_externa).' original='.$otra_variable_externa."</p>";

nota que en este caso la variable $otra_variable_externa en este caso si tomó el valor modificad por la función, en cambio si quitas el operador de referencia (&), la misma conserva su valor.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 30/03/2011, 19:26
 
Fecha de Ingreso: abril-2010
Ubicación: Calama
Mensajes: 58
Antigüedad: 14 años
Puntos: 0
Respuesta: Dudas sobre parámetros de funciones

Cita:
Iniciado por maycolalvarez Ver Mensaje
nota que en este caso la variable $otra_variable_externa en este caso si tomó el valor modificad por la función, en cambio si quitas el operador de referencia (&), la misma conserva su valor.
mmm me dejaste igual. probé el código que sugieres y, al anteponerle el ampersand al parámetro, la función devuelve un valor, pero al quitárle el ampersand, devuelve el mismo valor.

prueba el código. ponele el ampersand y te dará un valor; quítale el ampersand y te dará el mismo valor.

sigo sin entender...
  #4 (permalink)  
Antiguo 30/03/2011, 19:43
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Dudas sobre parámetros de funciones

el paso de variables por referencia afecta a la variable no al valor de retorno (return), no te estás fijando bien en el resultado que te está devolviendo (la parte en rojo):

echo "<p>retorno= ".prueba2($otra_variable_externa).' original='.$otra_variable_externa."</p>";

el retorno siempre será igual, lo que cambia es que puedes alterar el contenido de la variable externa a la función, porque el paso por referencias lo que hace es pasar el puntero en memoria y no copia del contenido de la misma, es un concepto básico (y heredado) del lenguaje C
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 30/03/2011, 19:48
 
Fecha de Ingreso: abril-2010
Ubicación: Calama
Mensajes: 58
Antigüedad: 14 años
Puntos: 0
Respuesta: Dudas sobre parámetros de funciones

ahhhhhhhh jeje a ver a ver a ver... mal entendido tenía el asuntito yo entonces al pensar que la variable que cambia es la variable que está dentro de la función. por lo que estoi viendo, la variable que cambia (al pasar parámetros por referencia) es la que está FUERA de la función.

toi entendiendo bien?????
  #6 (permalink)  
Antiguo 30/03/2011, 19:50
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Dudas sobre parámetros de funciones

Cita:
Iniciado por novoweb Ver Mensaje
ahhhhhhhh jeje a ver a ver a ver... mal entendido tenía el asuntito yo entonces al pensar que la variable que cambia es la variable que está dentro de la función. por lo que estoi viendo, la variable que cambia (al pasar parámetros por referencia) es la que está FUERA de la función.

toi entendiendo bien?????
exacto !!!

no fuera, sino la que pasas por referencia, porque puedes tener una variable global, o superglobal, pero si no lo es y no la pasas por referencia, no cambia.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 30/03/2011, 19:52
 
Fecha de Ingreso: abril-2010
Ubicación: Calama
Mensajes: 58
Antigüedad: 14 años
Puntos: 0
Respuesta: Dudas sobre parámetros de funciones

siendo asi la cosa (y obviamente las mentes pensantes lo inventaron por algo), ¿en qué situasiones prácticas me serviría eso de pasar parámetros por referencia?
  #8 (permalink)  
Antiguo 30/03/2011, 19:59
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Dudas sobre parámetros de funciones

cuando haces alguna función que te devuelve un valor, pero que quieras devolver otra cosa y no puedas pasarla directamente por el return, son pocos los casos que me ha tocado usarla, pero en recursión es común para no afectar el valor devuelto en la pila de llamadas.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: dudas, funciones
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




La zona horaria es GMT -6. Ahora son las 11:51.