Puedes hacerlo como mejor te venga. Hay que intentar crear clases de "cosas" y que con sólo ver su nombre sepas lo que puedes encontrar en ella. Por ejemplo la clase query no queda muy claro lo que es. Bueno si, da interacción con la base de datos, pero el nombre no queda del todo bien. BdHandler que te parece?
De todos modos tanto conexion como query son cosas que se hacen sobre una base de datos por lo que yo no haría dos clases distintas a no ser que tengas una razón sólida. Yo haría una sola clase, Bd
La clase Usuario está bien salvo el método listar(), debería ser así
Código PHP:
public function listar()
{
$sql="SELECT * FROM clientes";
$result=$this->ejecutar($sql);
$this->limpiar();
return $result;
}
De todos modos aquí se trata de que cada uno cree modelos de datos, patrones y clases de las necesidades que tenga. Aquí no hay pócima secreta. Sólo hace falta tiempo. Yo sólo llevo tres años en esto y cuando miro código del principio flipo de las cosas tan complicadas que hacía pudiéndolas hacer más sencillas.
Yo aprendí mucho de conceptos POO con un libro de Java. En concreto
Piensa en Java Cita: Si creo otra clase productos que tb hereda de query (constructor y destructor igual que usuario) y estoy trabajando a la vez con usuarios y productos se me crearian dos conexiones a la BBDD. Eso no sería correcto no?
En esto la verdad es que no lo se del todo. Al usar el patrón singleton yo sólo uso una instancia y no he salseado mucho más.