Creo entender el punto expuesto por
@pateketrueke
Código PHP:
Ver originalforeach($test->datos as $test) {
// $test sobreescribe al objeto y, por tanto, llama al destructor
// Las iteraciones son sobre valores que contenía $test->datos
}
foreach($test->datos as $dato) {
// Aquí no se sobreescribe el objeto y no debería aparecer "Destruido"
}