La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Bases de données Singleton pour la connexion

Présentations similaires


Présentation au sujet: "Bases de données Singleton pour la connexion"— Transcription de la présentation:

1 Bases de données Singleton pour la connexion
Jérôme CUTRONA 09:33:49 Programmation Web

2 Problématique 09:33:49 Programmation Web

3 Problème posé Développement d'un site nécessitant une BD :
Connexion en début de chaque page PHP Requête(s) Déconnexion en fin de chaque page PHP Développement objet d'un site avec une BD : Connexions à divers endroits dans les méthodes Requête(s) à divers endroits dans les méthodes Déconnexion en fin de page PHP à prévoir  Quand doit-on se connecter, se déconnecter ? 09:33:49 Programmation Web

4 Solution classique : Singleton
09:33:49 Programmation Web

5 Singleton : objet à instance unique Réalisation :
Solution : Singleton Singleton : objet à instance unique Pour notre problématique : Instance unique => connexion unique Réalisation : 1 attribut de classe (static) Instance du Singleton 1 point d'accès méthode de classe (static), gère l’unicité de l’instance limiter l'accès au constructeur privé / protégé interdire le clonage 09:33:49 Programmation Web

6 Solution : Singleton Adaptation à la connexion BD PDO : MyPDO
1 attribut de classe (static) _PDOInstance, instance de PDO 1 point d'accès Méthode de classe (static) getInstance() Instanciation PDO si nécessaire => connexion constructeur privé, empêche de construire MyPDO, pas PDO Interdire la construction Destructeur, inutile car aucune instance MyPDO créée mise hors service de la méthode __clone , inutile car PDO retourné par le point d’accès MyPDO = usine à instance unique de PDO 09:33:49 Programmation Web

7 Durée de vie de l'objet myPDO
Nature de l'objet PDO attribut de classe (static) : variable globale Construction PDO créé au premier appel de MyPDO::getInstance() Destruction PDO variable globale : durée de vie = le programme détruit en fin de programme Bilan Connexion (construction PDO) lors de la première requête Déconnexion (destruction PDO) à la fin du script Fonctionnement propre et transparent pour le développeur 09:33:49 Programmation Web

8 Implémentation 09:33:49 Programmation Web

9 Une implémentation <?php final class MyPDO { /** PDO $_PDOInstance Instance unique de PDO. */ private static $_PDOInstance = null; string $_DSN DSN pour la connexion BD. private static $_DSN = null; string $_username Nom d'utilisateur pour la connexion BD. private static $_username = null; string $_password Mot de passe pour la connexion BD. private static $_password = null; 09:33:49 Programmation Web

10 Une implémentation /** array $_driverOptions Options du pilote BD. */ private static $_driverOptions = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ); * Constructeur privé * (juste pour vous passer l'envie d'instancier des objets MyPDO) private function __construct() { } 09:33:49 Programmation Web

11 Une implémentation /** * Point d'accès à l'instance unique. * L'instance est créée au premier appel * et réutilisée aux appels suivants. Exception si la configuration n'a pas été effectuée. * PDO instance unique */ public static function getInstance() { if (is_null(self::$_PDOInstance)) { if (self::hasConfiguration()) { self::$_PDOInstance = new PDO(self::$_DSN, self::$_username, self::$_password, self::$_driverOptions); } else { throw new Exception(__CLASS__ . ": Configuration not set"); return self::$_PDOInstance ; 09:33:49 Programmation Web

12 Gestion des paramètres de configuration
09:33:49 Programmation Web

13 Une implémentation /** * Fixer la configuration de la connexion à la BD. * string $dsn DNS pour la connexion BD. string $username Utilisateur pour la connexion BD. string $password Mot de passe pour la connexion BD. array $driver_options Options du pilote BD. void */ public static function setConfiguration( string $dsn, string $username='', string $password='', array $driver_options=array()) : void { self::$_DSN = $dsn; self::$_username = $username; self::$_password = $password; self::$_driverOptions = $driver_options + self::$_driverOptions; } 09:33:49 Programmation Web

14 Une implémentation /** * Vérifier si la configuration de la connexion à la BD a été effectuée. * bool */ private static function hasConfiguration() : bool { return self::$_DSN !== null; } 09:33:49 Programmation Web

15 Utilisation 09:33:49 Programmation Web

16 Simple, non ? Utilisation
require_once 'MyPDO.template.class.php'; /* Exemple de configuration et d'utilisation */ MyPDO::setConfiguration( 'mysql:host=mysql;dbname=cutron01_cdobj;charset=utf8', 'web', 'web'); MyPDO::getInstance()->prepare(<<<SQL SELECT id, name FROM artist ORDER BY name SQL ); $stmt->execute(); while (($ligne = $stmt->fetch()) !== false) { echo "<p>{$ligne['name']}\n"; } // Déconnexion automatique en fin de script Simple, non ? 09:33:49 Programmation Web

17 Utilisation require_once 'MyPDO.template.class.php'; /* Exemple de configuration et d'utilisation */ MyPDO::setConfiguration( 'mysql:host=mysql;dbname=cutron01_cdobj;charset=utf8', 'web', 'web'); MyPDO::getInstance()->prepare(<<<SQL SELECT id, name FROM artist ORDER BY name SQL ); $stmt->execute(); while (($ligne = $stmt->fetch()) !== false) { echo "<p>{$ligne['name']}\n"; } // Déconnexion automatique en fin de script La configuration ne doit pas se trouver dans chaque fichier nécessitant un accès à la base de données 09:33:49 Programmation Web

18 Utilisation Fichier de configuration MyPDO.class.php
require_once 'MyPDO.template.class.php'; MyPDO::setConfiguration( 'mysql:host=mysql;dbname=cutron01_cdobj;charset=utf8', 'web', 'web'); require_once 'MyPDO.class.php'; MyPDO::getInstance()->prepare(<<<SQL SELECT id, name FROM artist ORDER BY name SQL ); $stmt->execute(); … Fichier de configuration MyPDO.class.php 09:33:49 Programmation Web


Télécharger ppt "Bases de données Singleton pour la connexion"

Présentations similaires


Annonces Google