Foros del Web » Programando para Internet » PHP »

Funciones con simbolo &

Estas en el tema de Funciones con simbolo & en el foro de PHP en Foros del Web. Hola, he visto que algunas funciones php tienen el simbolo & delante del nombre e incluso este mismo simbolo parece delante de los parametros que ...
  #1 (permalink)  
Antiguo 14/01/2005, 12:55
Avatar de Kernellover  
Fecha de Ingreso: noviembre-2002
Ubicación: Perdido
Mensajes: 251
Antigüedad: 15 años, 1 mes
Puntos: 0
Pregunta Funciones con simbolo &

Hola, he visto que algunas funciones php tienen el simbolo & delante del nombre e incluso este mismo simbolo parece delante de los parametros que se pasan a dicha función y no entiendo que utilidad tiene esto... alguien me lo puede explicar?

Gracias por ayudarme a entender.

Salut!
  #2 (permalink)  
Antiguo 14/01/2005, 13:04
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Espero esto te aclare un poco el tema de pasar por valor o por referencia:
http://www.phpbuilder.com/manual2/ma....variables.php
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 14/01/2005, 13:25
Avatar de Kernellover  
Fecha de Ingreso: noviembre-2002
Ubicación: Perdido
Mensajes: 251
Antigüedad: 15 años, 1 mes
Puntos: 0
Muchas gracias nicolaspar, entonces, delante de una variabe hará referencia a la misma variable si esta se modifica, es genial porque así no hace falta crear variables globales si no que poniendo el simbolo, al modificar el dato dentro de la funcion se modifica fuera de esta tmb.

Pero hay algo que no entiendo, cuando el simbolo precede al nombre de la función que hace?

Gracias nuevamente por aclarar las dudas que minan esta mente inculta.
  #4 (permalink)  
Antiguo 14/01/2005, 14:01
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Es igual, es referencia (si no es asi que me corrijan). Se usa mucho, mas que en variables, en objetos y instancias, para no estar recreandolo en todo momento mientras pueda ser reutilizado en la misma instancia. Suponete que necesitas, en una funcion hacer una consulata a la db. Para esto deverias hacer una nueva conexion o include de esta, y cerrarla, lo cual creo que cerraria tambien la abierta desde el ambito publico. Entonces lo que se suele hacer es pasarle el $conn como referencia, pasando asi el puntero a la db.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 14/01/2005, 14:16
Avatar de Kernellover  
Fecha de Ingreso: noviembre-2002
Ubicación: Perdido
Mensajes: 251
Antigüedad: 15 años, 1 mes
Puntos: 0
Agradezco tu ayuda nicolaspar.

Entonces el simbolo indica que es por referencia, sea lo que sea, objeto variable o funcion... creo que lo entiendo hasta aquí pero una función entera que sea por referencia, me cuesta pilar el concepto, no se si significa que los parametros de esta función serán por referencia o que la propia función hace referencia a ... me stoy liando creo.

Entindo que los parametros de la función puedan ser llamados por referencia

function prueva(&$var){...}

pero que la propia función sea por referencia me hace sacar espuma por la boca mientras me cojen tics nerviosos en el hombro y el ojo izquierdo

function &prueba($var){...}

Parece que es mas compicado de lo que pensaba too esto. Si alguien da mas que no dude en hacermelo saber. Gracias de nuevo
  #6 (permalink)  
Antiguo 14/01/2005, 14:29
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Si, al menos yo ahi no puedo decirte mas "Es igual, es referencia (si no es asi que me corrijan)" :(Se de las variables que es lo mas abitual, y creo haber visto en funciones eso, pero sinseramente no recurdo donde.
Estoy dando mis primeros pasos con classe, pero creo que esas funciones que vos decis son metodos de alguna classe y no funciones "colgadas"...
__________________
Mi punto de partida es Que Bueno Lo Nuevo

Última edición por nicolaspar; 14/01/2005 a las 14:37
  #7 (permalink)  
Antiguo 14/01/2005, 15:06
Avatar de Kernellover  
Fecha de Ingreso: noviembre-2002
Ubicación: Perdido
Mensajes: 251
Antigüedad: 15 años, 1 mes
Puntos: 0
De todos modos muchas gracias me ha servido de mucho lo que me has explicado, mas que nada porque me ha dado nuevas ideas para mejorar mis códigos.

Suerte!
  #8 (permalink)  
Antiguo 14/01/2005, 15:11
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
No hay por que, de todas maneras, seguramente haya alguien que pueda explicar lo de la & en funiones/metodos, y aclarar un poco mas el tema.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #9 (permalink)  
Antiguo 17/01/2005, 06:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El termino "Referencia" sólo afecta a como trabaja el "lenguaje" (en este caso PHP .. pues esto lo usan la mayoría de lenguajes de programación) a los datos en sí de tus varaibles/objetos y demás en "memoria" .. Si se usa el & en PHP delante de una función/variable/objeto .. simplemente le dice al lenguaje que tome la misma función/variable/objeto declarado en tal posición de "memoria" y la use .. no creando así otra "instancia" (duplicado) de dicha variable con el consiguiente consumo de recursos del servidor.

No tiene nada que ver con el "ambito" de las varaibles/funciones/objetos en la ejecución de un script .. recordemos que en PHP .. la vida de tus variables/objetos/funciones se limita al tiempo de ejecución del script .. desde que empieza hasta que termina .. ahí muere todo. Si necesitas de una variable por ejemplo en otros scripts (o el mismo script en una recarga) se ha de "propagar" dicho dato por el URL (en un link, formulario campo hidden.. etc) o en una sesión o en una cookie o en otro médio de almacenamiento temporal (un archivo de texto plano . una Base de datos .. etc).

Un saludo,
  #10 (permalink)  
Antiguo 17/01/2005, 15:23
Avatar de Kernellover  
Fecha de Ingreso: noviembre-2002
Ubicación: Perdido
Mensajes: 251
Antigüedad: 15 años, 1 mes
Puntos: 0
Bien Cluster, gracias antes que nada... Me lo he leido un monton de veces y creo que lo entiendo, pero me surgen las dudas que creo que son normales en mi por lo menos :)

A ver, si una función precisamente se define para optimiar el código de partes que se preveen que se repetirán, si la declaras por referencia quiere decir que quizás la hayas declarado en otro momento del script y para evitar consumir mas recursos por cargarla varias veces se declara por referencia así se evitan probemas? quizás sea un poco duro de mollera pero una función llamada por referencia me resulta dificil de entender.

Entiendo que una variable se llame por referencia y esta use el mismo puntero de memoria que la otra, pero una función? Quizás sea para llamar a la misma función de otra manera como el caso de la variable u objeto? (Dejemos el objeto por el momento, te parece bien?)

Te agradecería un ejemplo, por muy cutre que sea para pillar el concepto si no es mucho pedir.

Mucas gracias a todos
  #11 (permalink)  
Antiguo 17/01/2005, 17:39
 
Fecha de Ingreso: septiembre-2001
Ubicación: Monterrey
Mensajes: 663
Antigüedad: 16 años, 2 meses
Puntos: 6
Haber la sintaxis para que una funcion devuelva una referencia es la sigueinte:
Código PHP:
function &nombre_funcion ($param)
{
   ...
codigo...
   return 
$var_encontrada;

La sintaxis no esta diciendo que una funcion se pasa como referencia, si no que una funcion puede devolver una referencia como producto de sus operaciones mediante un return. Esto es muy diferente a lo que esta pensando kernellover; es decir que yo puedo por ejemplo crear un wraper para hacer una conexion a una base de datos y en vez de devolver la conexion como una copia puedo hacerlo como una referencia o en el caso mas comun de los objetos ( php 4 ) que para evitar estar haciendo y pasando copias de objetos con resultados inesperados, hacemos mejor uso de la referencia para que las variables a las que pasamos el objeto esten viendo el mismo contenido y no copias.
Para mas detalles ve la documentacion y el ejemplo que se maneja http://www.php.net/manual/es/languag...ces.return.php

Última edición por Herminio Heredia San; 17/01/2005 a las 17:42
  #12 (permalink)  
Antiguo 18/01/2005, 12:57
Avatar de Kernellover  
Fecha de Ingreso: noviembre-2002
Ubicación: Perdido
Mensajes: 251
Antigüedad: 15 años, 1 mes
Puntos: 0
Aha! ahora comprendo... ya decía yo, me parecia raro que fuera lo que yo decía; Ahora lo entiedo perfectamente, muchas gracias a todos por vuestra dedicación, os agradezco el esfuerzo y estoy seguro de que la satisfación no será equiparable a la mia ;)

Gracias

Un Saludo y suerte en vuestros proyectos!
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 07:56.