Foros del Web » Programando para Internet » PHP »

duda de & (ampersand)

Estas en el tema de duda de & (ampersand) en el foro de PHP en Foros del Web. revisando unos codigos para ser mas preciso, codigo de postnuke, me encontre con un ampersand antes de un arreglo y realmente nose cual es la ...
  #1 (permalink)  
Antiguo 07/01/2003, 09:08
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
duda de & (ampersand)

revisando unos codigos para ser mas preciso, codigo de postnuke, me encontre con un ampersand antes de un arreglo y realmente nose cual es la gracia
sale algo asi:
Código PHP:
$column = &$pntable['autonews_column']; 
alguien me puede decir para que es????
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #2 (permalink)  
Antiguo 07/01/2003, 09:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Se le denomina "referencia" .. al metodo de usar &valor ...

En el manual de PHP:
http://www.php.net/manual/es/language.references.php

(mas teoria no sé .. no lo suelo usar .. deberia?)

Un saludo,
  #3 (permalink)  
Antiguo 07/01/2003, 10:57
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Es lo que en C equivale a un "puntero" a un valor.
Lo que está haciendo el código que publicaste, es que $column, pasa a ser un puntero ( o como lo llama la gente de PHP y como deberiamos llamarlo, referencia ) hacia el valor que se encuentra en $pntable['autonews_column'].

De esa manera, cualquier cambio de valor que le hagas a la variable $column, también se reflejará en el array al que apunta.

Te recomiendo que leas la documentación que te publicó Cluster ( y a Cluster le recomiendo que se la lea también, es una manera de no gastar tanto recurso al utilizar objetos )

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #4 (permalink)  
Antiguo 07/01/2003, 10:59
 
Fecha de Ingreso: septiembre-2001
Ubicación: Monterrey
Mensajes: 663
Antigüedad: 22 años, 7 meses
Puntos: 6
Vaya, antes que nada Bhonox este que estas preguntando es todo un tema es php, y a un que es un termino sencillo si suele ser un poco confuso, como quiera intentare explicarlo lo mas claro que pueda, claro sera una explicacion sencilla para mas detalles te sugiero al igual que Cluster que visites el manual para una lectura profunda sobre el tema.

Bien, veamos en php puedes pasar el valor de una variable de dos formas una es mediante una copia y la otra por medio de referencias es decir si tenemos algo como esto:
Código PHP:
$a 1$b $a
Quiere decir que $a esta asignando una copia de su contenido a $b es decir que el contenido de $a y $b son independientes uno del otro, esto quiere decir que si hago operaciones en una de las variables el valor de la otra no se vera afectado. A hora vemoa el otro lado de la moneda con uan expresion como la siguiente.
Código PHP:
$a 1$b =& $a
Bien, parece que todo es igual pero realmente hay una pequeña diferencia cuando yo agrego un =& le estoy diciendo a php que vamos a usar una referencia y bien una referencia no es otra cosa que una forma do de usar el contenido de una variable con diferentes nombre, volviendo a nuestro caso anterior yo le estoy diciendo a $b que haga referencia o apunte al valor de contenido de $a, es decir que ahora tanto $a y $b estan "mirando" el mismo contenido, aqui lo interesante de esto es que si yo hago una operacion sobre $b esto generara un cambio en $a, y esto es debido aque ambas variables estan usando el mismo valor, veamos esto con un ejemplo:
Código PHP:
$a 1$b =& $a;
echo 
$a;
echo 
$b;// ambas valen 1
$b++;
echo 
$a;
echo 
$b;// ambas vale 2 
Este es un ejemplo sencillo y tal vez no refleja mucha utilidad pero esto tiene una ventaja que al no pasarse una copia de la variables ahorras memoria, ademas de que para ciertas circunstancias son muy utiles y en ocasiones haces uso de ellas sin darte cuenta, como lo es cuando hacemos una variable global, realmente estamos haciendo referencia a esta variables es decir tener global $var es lo mismo que hacer $var = &$GLOBAL['var].

Y bueno en un momento le sigo por que tengo que hacer unas cosas....
  #5 (permalink)  
Antiguo 07/01/2003, 11:20
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 22 años, 6 meses
Puntos: 5
Como bien dijo pablo se usa generalmente para gastar menos recursos en OOP jeje simpre k se crea un objeto con new es conveniente usarlo:

Código PHP:
<?PHP

class hola{
$var;
function 
hola(){
$this->var "hola";
}
function 
adios($valor){
$this->var $valor
}
}

$objeto = &new hola;
$objeto->adios("agur jeje");
?>
__________________
Usuario registrado de Linux #288725
  #6 (permalink)  
Antiguo 07/01/2003, 11:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
jeje .. pues ya me quedó claro .. Simpre digo q todos los dias aprendo algo .. Solo sabia del tema de "oidas xD" .. pero no me habia puesto a darle utilidad .. veo q así se equilibran mejor los recursos del servidor (memoria).

Un saludo,
  #7 (permalink)  
Antiguo 07/01/2003, 12:41
Avatar de kamezen  
Fecha de Ingreso: junio-2001
Ubicación: México, D.F.
Mensajes: 128
Antigüedad: 22 años, 10 meses
Puntos: 0
Se podria colocar este tema en las FAQ'S para su consulta ! !!!

Para beneficio de el resto de los usuarios !! Al ser un tema muy interesante !! y de mucha utilidad !!!

__________________
No esperes a que tu Nación haga algo por ti !!! Mejor haz primero algo por tu Nación !!!
México-WEB
  #8 (permalink)  
Antiguo 07/01/2003, 12:43
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 21 años, 9 meses
Puntos: 0
bueno a mi tambien me quedo claro, aunque pense que era una respuesta mas sencilla pero al final sirvio para aprender

Gracias a todos
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #9 (permalink)  
Antiguo 07/01/2003, 20:38
Avatar de SpiceMan  
Fecha de Ingreso: noviembre-2002
Mensajes: 160
Antigüedad: 21 años, 5 meses
Puntos: 0
Cita:
Mensaje Original por Webstudio
Es lo que en C equivale a un "puntero" a un valor.
Lo que está haciendo el código que publicaste, es que $column, pasa a ser un puntero ( o como lo llama la gente de PHP y como deberiamos llamarlo, referencia ) hacia el valor que se encuentra en $pntable['autonews_column'].
En PHP asi como otros lenguajes de scripting (Perl, por ejemplo) hay referencias, pero no hay punteros.
En C y Java hay punteros y referencias, pero no son conceptos intercambiables.

Las diferencias, basicamente, son:
Los punteros apuntan a una direccion de memoria.
Las referencias "refieren" a una variable o constante (o funcion, u objeto o lo que sea) guardando la direccion de memoria del elemento al que esta referido.
Modificando el valor de un puntero, se modifica la direccion a la que apunta, no el contenido de la direccion de memoria.
Modificando el valor de una referencia, se modifican los datos a los que esta referenciado la referencia (a menos que este desreferenciada, claro )

Última edición por SpiceMan; 07/01/2003 a las 20:44
  #10 (permalink)  
Antiguo 07/01/2003, 20:48
Avatar de SpiceMan  
Fecha de Ingreso: noviembre-2002
Mensajes: 160
Antigüedad: 21 años, 5 meses
Puntos: 0
(de el manual de PHP)

Que son las referencias

Las referencias en PHP son un metodo para acceder a los mismos contenidos de una variable mediante distintos nombres. No son como los punteros de C, son alias en la tabla de simbolos. Notese que en PHP, los nombres de variables y los contenidos de las variables son distintos, por lo que un mismo contenido puede tener distintos nombres. La analogia mas cercana son los nombres de archivos y archivos en UNIX - los nombres de variables son el listado de directorio, mientras que los contenidos de variables son los archivos en si. Las referencias se pueden pensar como si fueran hardlinks del sistema de archivos UNIX.
  #11 (permalink)  
Antiguo 07/01/2003, 21:09
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Ok, reconozco el error de que para hacer mas entendible algo, di un ejemplo que no era el más correcto.
Ahora, SpiceMan (Hernán era no?), reconozco un puntero en C, pero una referencia en C no la llegué a utilizar... (creo).
Que sería, el nombre de una función utilizado como puntero a misma? el nombre de un array utilizado como direccion del primer elemento, o es algo más de lo que me perdí ?

Saludos, y gracias por aclarar este punto.!
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #12 (permalink)  
Antiguo 07/01/2003, 21:18
Avatar de chalito  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago, chile
Mensajes: 221
Antigüedad: 21 años, 4 meses
Puntos: 0
Cita:
Mensaje Original por SpiceMan

En C y Java hay punteros y referencias, pero no son conceptos intercambiables.
Pues el unico error es que en Java no existen punteros, si en C/C++ pero java no los implementa por un problema de seguridad, ya que al ocupar applet seria muy inseguro acceder a los recursos de otro computador mediante la red, si Java usara punteros podria acceder a cualquier parte de la memoria de un pc, siendo esto inseguro. Bueno, solo era esa aclaracion para no confundir a otros programadores que tambine programen en esos lenguages.

Saludos
  #13 (permalink)  
Antiguo 07/01/2003, 21:31
Avatar de SpiceMan  
Fecha de Ingreso: noviembre-2002
Mensajes: 160
Antigüedad: 21 años, 5 meses
Puntos: 0
Chalito: hmm si, no conozco mucho de java, pero sabia que no habia punteros... se me chispoteo

Webstudio: no, MMontes (Marcel Montes). de hernan no tengo nada XD...

Puntero:

int entero;
int *punteroaentero = &entero; (& para obtener la direccion de memoria de puntero, como rvalue funciona de esa manera, no confundir con referencias);

Referencia:

int entero;
int &referenciaapuntero = entero; (& como lvalue denota referencia, no estoy obteniendo la direccion de memoria. Tambien no hace falta ninguna operacion sobre la variable entero, con solo asignarla ya estoy referenciandola).


Todo esto en C/C++, claro.
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 10:14.