Bases de données Singleton pour la connexion

Slides:



Advertisements
Présentations similaires
PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Advertisements

Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
MySQL et PHP.
PHP mySQL Extension php_mysql. Connexion à une base de données Établir une connexion mysql_connect(string server, string username, string password) –permet.
Jérôme CUTRONA PHP et bases de données Jérôme CUTRONA 01:07:51 Programmation Web
Jérôme CUTRONA PHP PDO Jérôme CUTRONA 01:08:01 Programmation Web
11:37:32 Programmation Web PHP5 objet "avancé" Jérôme CUTRONA
Bases de données Objet singleton pour la connexion
Bases de données Objet singleton pour la connexion
بسم الله الرحمن الرحيم. Institut Supérieure des Etudes Technologiques de Kébili.
Connexion base de données
Le langage PHP 5.
POO-L3 H. Fauconnier1 Chapitre IV 1. classe Object, clonage 2. interfaces 3. classes internes et imbriquées.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
COURS DE PROGRAMMATION ORIENTEE OBJET :
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Cours 7 Classes locales Clonage Divers: tableaux.
PHP 7° PARTIE : PROGRAMMATION OBJET
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Cours du 5 novembre.
PHP5 objet "avancé" Jérôme CUTRONA 09:56:48 Programmation Web
Pthread Ordonnancement. #define _MULTI_THREADED #include #ifndef _CHECK_H #define _CHECK_H /* headers used by a majority of the example program */ #include.
Bases de données Singleton pour la connexion
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Système de gestion d'entrées pour un cinéma Scanvion Michel – Etudiant 4.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ Cycle de vie ● La vie d'un objet ● Destructeur ● Gestion de mémoire dynamique.
Module S41 Chapitre 11  Configuration de Windows XP Professionnel pour l'informatique mobile.
Eric b, emmanuel l, damien t
Modèle objet : les classes
Le CMS Joomla La mise en place du CMS est inscrite dans le dossier d’homologation Attente : avoir une plateforme commune de travail et de publication.
Environnement de développement des BD
Environnement du développement de BD ORACLE REPORTS 10g
Robotisation de la ligne transitique
Pas de variable globale
Les notions de classe et d'objet
Implémentation de PayPal
Guide Share MQ HA & Appliance
Outils de gestion documentaire
Principes de programmation (suite)
MVC et applications Web
PHP Création et manipulation d'images
Changer les critères de nommage
Diagramme de classe UML et C++
Introduction BD TABLES ET DONNÉES champs OU données, types de données
Programmation en C++ C++ de base
Programmation Orientée Objet C# El Akel Bouchra ISMONTIC Tanger 2013/2014.
Présentation de frameworks J2EE 1 LIU Sizhao LUO Xin MALICK MANDENGUE Serge.
Les protocoles de la couche application Chapitre 7.
PHP Création et manipulation d'images
Les classes et les objets
Programmation PHP / PDO
Jérôme CUTRONA PHP5 objet "avancé" Jérôme CUTRONA 03:07:13 Programmation Web
PABP Le Programme d’Apprentissage Basé sur la Pratique.
Programmation Web : DOM en PHP
Info Bases de données avancées
Schéma de conception Factory Method Exemple
Lecture/Écriture de fichiers (I/O)
Jérôme CUTRONA PHP objet Jérôme CUTRONA 08:30:34 Programmation Web
YII Yes It Is !.
Jérôme CUTRONA PHP PDO Jérôme CUTRONA 23:38:06 Programmation Web
TP N°6: Construction d’un Serveur Multi-Client
Transcription de la présentation:

Bases de données Singleton pour la connexion Jérôme CUTRONA jerome.cutrona@univ-reims.fr 09:33:49 Programmation Web 2017-2018

Problématique 09:33:49 Programmation Web 2017-2018

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 2017-2018

Solution classique : Singleton 09:33:49 Programmation Web 2017-2018

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 2017-2018

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 2017-2018

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 2017-2018

Implémentation 09:33:49 Programmation Web 2017-2018

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

Une implémentation /** * @var 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 2017-2018

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. * @throws Exception si la configuration n'a pas été effectuée. * * @return 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 2017-2018

Gestion des paramètres de configuration 09:33:49 Programmation Web 2017-2018

Une implémentation /** * Fixer la configuration de la connexion à la BD. * * @param string $dsn DNS pour la connexion BD. * @param string $username Utilisateur pour la connexion BD. * @param string $password Mot de passe pour la connexion BD. * @param array $driver_options Options du pilote BD. * @return 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 2017-2018

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

Utilisation 09:33:49 Programmation Web 2017-2018

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 2017-2018

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 2017-2018

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 2017-2018