Ver Mensaje Individual
  #9 (permalink)  
Antiguo 12/08/2014, 21:00
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Extraño comportamiento de foreach

Cita:
Te equivocas, $test es el valor que devuelve al extraer cada elemento dentro del foreach(), porque primero se hace una copia de $test->datos y a partir de ahí se sobre escribe $test por lo cual ya no representa al objeto.
Si el objeto se copiara se estaria duplicando, por lo tanto deberia ocupar el doble de memoria, sin embargo, unas de las pruebas hechas muestra que la memoria baja dentro del foreach, al llamarse al destructor se destruye el objeto pero la propiedad sigue existiendo ya que es iterada.

Cita:
foreach($test->datos as $test) {
// $test sobreescribe al objeto y, por tanto, llama al destructor
// Las iteraciones son sobre valores que contenía $test->datos
}
En el primer ejemplo de este mensaje: http://www.forosdelweb.com/f18/extra...0/#post4627420 no estoy iterando la propiedad, sino el objeto mismo a travez se sus metodos, sin embargo la variable se sobreescribe pero todo el objeto sigue existiendo en algun lado y solo es destruido luego de toda la iteracion.

Como si el elemento a iterar no se destruyera.

En la seccion de objetos y referencias esta esto:
Cita:
Desde PHP 5, una variable de tipo objeto ya no contiene el objeto en sí como valor. Únicamente contiene un identificador del objeto que le permite localizar al objeto real. Cuando se pasa un objeto como parámetro, o se devuelve como retorno, o se asigna a otra variable, las distintas variables no son alias: guardan una copia del identificador, que apunta al mismo objeto.
El objeto solo se destruye cuando no hay mas identificadores definidos de ese objeto.

¿Es posible que el foreach realice una copia de ese identificador y por lo tanto pueda seguir iterando aunque la variable original ya haya cambiado de valor?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios