par
moogli » 26 févr. 2013, 14:38
salut,
pourquoi étendre PDO vu l'utilisation ?
tu n'utilise pas _db, pas de surcharge des méthodes etc etc
bref pour moi inutile.
Le fait d'applique le pattern MVC n'implique pas de faire ce que tu fait.
Par contre il existe une "bonne pratique" nommée : injection de dépendance, qui correspond à ce que tu veux faire.
donc en gros tu instancie une connexion (ou plusieurs suivant les besoins) dans le contrôleur et tu la fournis aux classes que tu appelle (constructeur ou setter).
par exemple
<?php
class controleur {
private $instancePDO;
private $erreur;
public function __construct() {
try{
$this->instancePDO = new PDO('mysql:host=HOST;dbname=DBNAME' , 'USER' , 'MDP');
}
catch (Exception $e) {
$this->erreur = 'Une erreur à la connexion PDO s`est produite, ligne <strong>'. $e->getLine() .'</strong>.
Le message d`erreur est le suivant : <strong>'. $e->getMessage() .'</strong>';
}
}
public function getError() {
return $this->erreur;
}
/**
* Une méthode pour une page
*/
public function afficheListTruc(){
$trucDao = new trucDao($this->instancePDO);
return $trucDao->methodeMachin();
}
}
// la classe trucDao
class trucDao{
private $sgbd;
public function __construct(PDO $pdo) {
if ($pdo !== null) {
$this->sgbd = $pdo;
}
else {
throw new Exception('oups boulette faut un objet PDO :) ');
}
}
public function methodeMachin() {
return '';
}
}
dans ce cas tu fait de l'injection de dépendance sur trucDao.
l'objet que tu passe sera le même pour toutes les méthodes.
L'avantage c'est que tu ne t'emmerde pas a inclure un fichier ou utiliser une classe de plus qui t'apporte de la complexité et peux être des emmerdes
Si tu veux faire un truc chiadé tu peux très bien créer une interface que toute les classes DAO devront implémenter pour être certain d'avoir un constructeur respectant le motif indiqué (enfin dans la théorie, dans la pratique php n'est pas trop regardant mais le principe est la).
@+