@Cainzer: Je sais pas exactement ce que ton ami voulait faire... le fait de déclarer __construct() comme étant abstraite obligerait toutes tes classes filles à implémenter le constructeur, mais à vrai dire ça n'a strictement aucun intérêt de faire ça sur un constructeur puisqu'il n'y a pas de contrainte sur la signature de cette méthode... ça pourrait être intéressant sur une autre méthode pour forcer les classes filles à prendre certains arguments de type particulier, mais sur un constructeur je vois pas.
De plus en faisant comme ça, tu serais obligé d'instancier le PDO dans chaque classe fille (on perd le signleton et ça te force à réécrire du code).
Après il voulait peut-être que tu fasse une injection de dépendance dans tes modèles (même si je suis pas convaincu vu qu'il ne précise pas d'interface de connexion en paramètre du constructeur abstrait), je penses pas que ce soit judicieux dans ton cas, surtout pour débuter.
C'est intéressant sur une application qui a une certaine envergure, mais clairement, je ne te conseille pas de te lancer là-dedans alors que tu débutes en objet.
Si ça t'intéresse tu peux toutefois lire cet article qui décrit une façon relativement propre de procéder pour ce que tu souhaites faire : http://net.tutsplus.com/tutorials/php/how-to-write-testable-and-maintainable-code-in-php/
Quoi qu'in en soit la méthode du parent::__construct() avec l'instanciation du PDO dans la classe abstraite est déjà intéressante, je considère pas ça comme était une mauvaise pratique même si on peut aller beaucoup plus loin comme le montre l'article ci-dessus.