PHP WTF: Foreach con extraño comportamiento

Publicado el 04 agosto 2015 por Jocual

Hoy vamos a hablar de lo que parece un bug del foreach de PHP pero como comprobaremos no lo es tanto…

Supongamos que tenemos el siguiente código

<?php $array = array('foo', 'bar'); foreach ($array as &$valor); foreach ($array as $valor); var_dump($array); ?>

¿Que creéis que pasa? Pues aunque parezca increíble este es el resultado:

<?php array(2) { [0]=>
string(3) "foo"
[1]=>
&string(3) "foo"
}
?>

Evidentemente lo primero que se te pasa por la cabeza es que es un bug de PHP, pero no, está documentado en php.net y la respuesta a dicho comportamiento es que la referencia del $valor y el último elemento del array permanecen aún después del bucle foreach.
Por lo tanto lo que nos recomiendan en estos casos es usar la función unset() para evitar problemas.