Foros del Web » Programando para Internet » PHP »

Diferencias por valor y por referencia

Estas en el tema de Diferencias por valor y por referencia en el foro de PHP en Foros del Web. Buenas, Tengo unas duda existencial, si a una variable le doy el valor de un objeto y esta la edito, no debería afectar a los ...
  #1 (permalink)  
Antiguo 22/11/2008, 06:13
 
Fecha de Ingreso: noviembre-2005
Ubicación: /dev/null
Mensajes: 23
Antigüedad: 18 años, 4 meses
Puntos: 0
Diferencias por valor y por referencia

Buenas,
Tengo unas duda existencial, si a una variable le doy el valor de un objeto y esta la edito, no debería afectar a los valor del objeto original, no? En cambio si lo hago por referencia si. A no ser que cuando se trata de objetos en PHP5 siempre se haga por referencia no entiendo que pasa.

Pongo el código de ejemplo porque me da que no me he explicado demasiado bien. $xml es un objeto que contiene una array con un canal Rss.

Si hago un paso por referencia:
Código:
$channel =& $xml->rss->channel; //Aquí lo que comento de asignación por referencia
foreach($channel->item as $item) {
  $item->description = "..."; //Cambiamos valores a description
}
echo "<pre>";
print_r($xml);
echo "</pre>";
El resultado del print_r podemos ver los ... en description, así vemos que aunque hemos modificado $channel también lo ha hecho $xml al ser por referencia. Hasta aquí todo bien.

Pero si lo hacemos por valor esto no debería pasar... Cambiamos
Código:
$channel =& $xml->rss->channel;
por
Código:
$channel = $xml->rss->channel;
Y seguimos viendo que el cambio en description también afecta a $xml.

¿Alguien sabe que puede estar pasando? ¿PHP5 siempre asigna objetos por referencia?
  #2 (permalink)  
Antiguo 22/11/2008, 07:58
 
Fecha de Ingreso: septiembre-2007
Mensajes: 59
Antigüedad: 16 años, 7 meses
Puntos: 3
Respuesta: Diferencias por valor y por referencia

Hay una seccion para Objetos :P
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 21:45.