Que tal, por un error en mi codigo descubri esta curiosidad del foreach:
Código PHP:
Ver original<?php
class A
{
public $datos = [1, 2, 3, 4, 5];
public function __destruct()
{
echo("destruido");
}
}
$test = new A();
foreach($test->datos as $test)
{
}
Produce la salida:
Cita: destruido
int 1
int 2
int 3
int 4
int 5
int 5
¿Acaso el foreach itera una propiedad de un objeto destruido?
En la
version serbia del manual (no en las otras
) esta la siguiente nota:
Cita: Напомена:
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.
¿Eso significa que si tengo un array inmenso, php lo duplicara para iterarlo?
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: int 84340000
destruido
int 84339928
int 145592
int 0
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?