Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1602 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Connexion PDO. construct, ou singleton ?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Connexion PDO. construct, ou singleton ?

n°2258977
13stephweb​13
Posté le 28-05-2015 à 15:14:16  profilanswer
 

Bonjour,
je suis débutant en POO.
j'aurai une question SVP.
Pour une classe connexion avec la BDD, est-ce mieux de le faire avec un constructeur, ou avec un singleton?
Voici mes 2 codes, je ne sais pas le quel choisir. Svp, je souhaiterai savoir, lequel des 2 fait le + pro, et le + performant.
 
Singleton:

Code :
  1. <?php
  2. class DB
  3. {
  4.     private static $_bdd;
  5.     private static $_Host = 'localhost';
  6.     private static $_DbName = 'cms';
  7.     private static $_Pseudo = 'root';
  8.     private static $_Mdp = '';
  9.     public static function getDB() {
  10.         if(is_null(self::$_bdd)) {
  11.             try {   
  12.                 self::$_bdd = new PDO('mysql:host='.self::$_Host.';charset=utf8;dbname='.self::$_DbName, self::$_Pseudo, self::$_Mdp);
  13.             }
  14.             catch(PDOException $e) {
  15.                 die('<h3>Une erreur est survenue lors du chargement de la page. Veuillez essayer d\'actualiser la page, ou revenir plus tard. Merci.</h3>');
  16.             }
  17.         }   // END if_null
  18.         return self::$_bdd;
  19.     }
  20. }   // END class
  21. ?>


 
Ou Constructeur:
 

Code :
  1. <?php
  2. class Db
  3. {
  4. private $host = 'localhost';
  5. private $name = 'ecommerce';
  6. private $user = 'root';
  7. private $pass = '';
  8. private $connexion;
  9. public function __construct($host=NULL, $name=NULL, $user=NULL, $pass=NULL) {
  10.  if($host != NULL) {
  11.   $this->host = $host;
  12.   $this->name = $name;
  13.   $this->user = $user;
  14.   $this->pass = $pass;
  15.  }
  16.  try {
  17.   $this->connexion = new PDO('mysql:host='.$this->host.';dbname='.$this->name,
  18.    $this->user,$this->pass, array(
  19.     PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
  20.     PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
  21.     ));
  22.  }
  23.  catch(PDOException $e) {
  24.   die('Erreur de connection');
  25.  }
  26. // END __construct
  27. } // END class
  28. ?>


 
Merci beaucoup.


Message édité par 13stephweb13 le 28-05-2015 à 15:15:45
mood
Publicité
Posté le 28-05-2015 à 15:14:16  profilanswer
 

n°2259116
noisetteoa​ddedia
Posté le 29-05-2015 à 22:53:12  profilanswer
 

Bonjour
Je te conseillerai plus le second, le fait de pouvoir passer les identifiants de connexion a la base de données te permettra de te connecter a plusieurs bases en même temps au besoin, ton premier code ne le permet pas
En plus, cela permet d'avoir d'un coté ta librairie et de l'autre coté tes identifiants, ton code sera plus réutilisable comme ca

n°2259686
bbalet
Posté le 04-06-2015 à 15:12:25  profilanswer
 

Par contre, le  
 

Code :
  1. catch(PDOException $e) {
  2.  die('Erreur de connection');
  3. }


 
c'est pas "pro" du tout... La fonction die/exit arrête l'exécution du script PHP à l'endroit où elle est appelée et finalise la réponse au navigateur en l'état. Donc l'utilisateur final obtiendra le message non formaté 'Erreur de connection' (avec la faute d’orthographe connection/connexion avec un style plus ou moins abouti en fonction de ce qui a été construit.
 
Dans le cas d'une classe technique, elle devrait émettre ses propres exceptions, c'est-à-dire faire un throw avec une exception personnalisée et tu devrais implémenter un gestionnaire d'exception global à l'application ( set_exception_handler et set_error_handler) qui inscrit des détails de l'exception dans un fichier puis affiche un message général à l'utilisateur (eg "Une erreur technique est survenue, veuillez contacter..." ) ou redirige vers une page d'erreur.

n°2259708
abais
Posté le 04-06-2015 à 22:04:19  profilanswer
 

La 1ère.
T'as une instance unique accessible de partout, alors qu'une instance "standard", tu ne l'as accessible que dans le contexte aval à ton instanciation.
Si tu as plusieurs BDD a attaquer, fais plusieurs instance de PDO dans le même singleton.
Avec plus de recul, si tu te pose cette question, c'est qu'il te manque de la pratique en POO.


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°2259709
13stephweb​13
Posté le 04-06-2015 à 22:13:50  profilanswer
 

Ok, merci pour les conseils. j'ai débuté le PHP fin février 2015, donc effectivement il me manque de la pratique.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Connexion PDO. construct, ou singleton ?

 

Sujets relatifs
Connexion utilisateurs et administrateur sans bdd (php)[VBScript] Connexion oracle en sysdba
Souci de connexion avec le Dashboard de Wordpressequivalence mysql_escape_string en PDO
Wordpress + connexion SSO + partie extranetConvertir moteur recherche mysql_ en PDO
scripte connexion a un compte web automatiquementProbleme connexion yahoo CSS
Connexion à un site avec cookies d'authentificationPointeur intelligent et singleton [résolu]
Plus de sujets relatifs à : Connexion PDO. construct, ou singleton ?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR