Cita: $test no contiene ninguna referencia al objecto, es una copia del último valor que se iteró en el foreach() y nada más.
Pero $test era el objeto, en ejemplo que me pones no pasa nada raro porque el nombre de la variable a iterar y la variable que se usa en la iteracion son diferentes, es lo que menciono @hhs, mi duda es cuando le das a los dos el mismo nombre