Código PHP:
Ver original
Produce la salida:
Cita:
¿Acaso el foreach itera una propiedad de un objeto destruido?destruido
int 1
int 2
int 3
int 4
int 5
int 5
int 1
int 2
int 3
int 4
int 5
int 5
En la version serbia del manual (no en las otras ) esta la siguiente nota:
Cita:
¿Eso significa que si tengo un array inmenso, php lo duplicara para iterarlo?Напомена:
Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself. foreach has some side effects on the array pointer. Don't rely on the array pointer during or after the foreach without resetting it.
Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself. foreach has some side effects on the array pointer. Don't rely on the array pointer during or after the foreach without resetting it.
para comprobarlo hice esto:
Código PHP:
Ver original
<?php class A { public $datos = []; public function __destruct() { echo("destruido"); } } $test = new A(); for($i=0; $i<999999; $i++) $test->datos[] = $i; foreach($test->datos as $test) { break; }
la salida es esta:
Cita:
por lo visto, el consumo de memoria baja dentro del foreach, por lo que no lo esta duplicando, entonces ¿que es lo que hace realmente? int 84340000
destruido
int 84339928
int 145592
int 0
destruido
int 84339928
int 145592
int 0