Cita:
Iniciado por NSD 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
Te equivocas, $test es el valor que devuelve al extraer cada elemento dentro del foreach(), porque primero se hace una copia de $test->datos y a partir de ahí se sobre escribe $test por lo cual ya no representa al objeto.