Bonjour,
je suis en train de développer une application web en php5 (POO) selon le modèle MVC et j'ai une petite interrogation concernant la gestion de la connexion sql (mysqli).
J'ai une classe sql qui contient le singleton de connexion défini comme ceci :
Ma classe core model.php (dont héritent toutes mes autres classes model) permet de centraliser les appels au fonctions de requêtes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 class sql{ // singleton sql private static $mysqli; // constructeur privé private function __construct(){ try{ self::$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME); } catch(Exception $e){ die('db connexion error'); } } // fonction qui retourne l'objet de connexion sql public static function getCnx(){ return isset(self::$mysqli) ? self::$mysqli : new sql(); } // appel de la méthode mysqli::query public function query($q){ return self::$mysqli->query($q); }
Le truc qui me perturbe est que dans la classe sql, je doive implémenter la méthode query !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 class model{ private $sql; // récupération du singleton sql public function __construct(){ //$this->sql = sql::getCnx(); } // exécution d'une requête et renvoie un tableau de résultats public function query($q){ try{ $r = sql::getCnx()->query($q); return $r->fetch_all(); } catch(Exception $e){ } } // exécution d'une requête qui ne retourne pas de résultats public function nonquery($q){ try{ sql::getCnx()->query($q); } catch(Exception $e){ } } }
- En effet, lorsque je fais un sql::getCnx(), j'obtiens bien une instance de mysqli, non ?
- Et comme toutes les instances de classe, elle devrait implémenter les méthodes de mysqli, non ?
- Et dans ce cas, pourquoi dans ma classe core model, ne puis-je pas faire directement sql::getCnx()->query($q); ?
- En effet, si je supprime la méthode query de ma classe sql, mon code ne fonctionne plus !
Je dois mélanger certains trucs, mais je n'arrive pas à comprendre quoi !
Merci de votre aide !
Partager