es muy sencillo, checando tu código estas guardando todas las canciones de todas las peticiones en una variable array, por lo tanto cada vez que haces una nueva petición se agregan las canciones a las peticiones anteriores
Código PHP:
Ver originalclass miclase {
private $canciones = array();
public function getCanciones() {
//código SQL, etc...
//lo que haces aquí es agregar un nuevo item al array
$this->canciones[] = $cancion;
//Por lo tanto si ya tienes por ejemplo 10 canciones cuando vuelvas a
//hacer otra petición la siguiente canción será el item 11 y así sucesivamente
//En estos casos es mejor una variable local
//Así no importa las peticiones, siempre estará vacía la variable canciones
$canciones[] = $cancion;
}
return $canciones;
}
}
ahora, no se porque "$this->canciones" la tienes como variable global (dentro de la clase), a menos que la uses en otro método no le veo sentido, en todo caso la variable debería ser local para no tener estos problemas
Cita: por que en el de los discos no me guarda los registros anteriores, y en el de las caniones si ?
Muy sencillo, porque solo haces una petición de los discos disponibles en cambio, las canciones haces una petición por cada disco, si haces mas de 1 petición a los discos, tendrás el mismo problema...