Hola. Gracias por tu respuesta tan descriptiva. Pero tengo algunas dudas:
1) En el caso del if(), en qué caso podría haber un arreglo vacío? No se supone que con el rowcount() ya se validó eso?
1.b) Pusiste:  
 Código PHP:
    if ($stm->rowCount() > 0) {
    return false; // or return [];
} 
    
  Pero siguiendo tu lógica creo que debería ser: 
 Código PHP:
    if ($stm->rowCount() = 0) {
    return false; // or return [];
} 
    
  2) Lo último que dices que no es necesario la asignación y que deje que PDO llene los objetos. No es necesario usar el VO? A qué te refieres exactamente y cómo varía el proceso? No entendí.
Gracias.