Creo que no entiendes como funciona el foreach() entonces.
Cita: Por lo tanto, la variable $test cambia su valor dentro del foreach, pero el objeto sigue "vivo" ya que se esta haciendo uso de sus metodos, solo es destruido al finalizar el foreach.
$test no contiene ninguna referencia al objecto, es una copia del último valor que se iteró en el foreach() y nada más.
Código PHP:
Ver original$foo = array('candy', 'bar');
foreach ($foo as $bar); // sin {}
echo $bar; // bar
¿Se entiende?