1 / 29

PHP Interface base de données

PHP Interface base de données. Problème de conception posé. Transcription d'un MCD en modèle objet PHP permettant de manipuler la base de données Règles de transcription : Une entité (attributs) devient une classe (attributs) Un enregistrement correspond donc une instance DF / CIF

freira
Download Presentation

PHP Interface base de données

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PHPInterface base de données Programmation Web 2013-2014

  2. Problème de conception posé • Transcription d'un MCD en modèle objet PHP permettant de manipuler la base de données • Règles de transcription : • Une entité (attributs) devient une classe (attributs)Un enregistrement correspond donc une instance • DF / CIF • Associations n,m Programmation Web 2013-2014

  3. MCD  modèle objet : Entité Programmation Web 2013-2014

  4. Appartenir MCD  modèle objet : DF / CIF 1,1 1,n Programmation Web 2013-2014

  5. Emplacements nbPlaces MCD  modèle objet : Association n,m 1,n 0,n Programmation Web 2013-2014

  6. Emplacements nbPlaces MCD  modèle objet : Association n,m 1,n 0,n Programmation Web 2013-2014

  7. Problème de conception posé <?php class Auteur { private$autid ; private$autnom ; private$autprn ; private$autnaiss ; private$autadr ; private$autcomm ; private$autlogin ; private$autpasswd ; private$autadmin ; private$autmail ; publicfunction __construct(...) … publicfunction lecture($id) … publicfunction ecriture() … } ?> Programmation Web 2013-2014

  8. Problème de conception posé <?php class Personne { private$persid ; private$grpnum ; private$persnom ; private$persprnm ; private$persad ; private$perscp ; private$persville ; private$perstel ; private$persmail ; private$persetat ; publicfunction __construct(...) … publicfunction lecture($id) … publicfunction ecriture() … } ?> Programmation Web 2013-2014

  9. Approche proposée • Créer un modèle des objets "ligne BD" • Doivent pouvoir gérer un enregistrement : • les valeurs et leurs étiquettes • gestion des entrées / sorties avec la BD :lecture / insertion / mise à jour • accès aux valeurs de façon sure • modification des valeurs de façon sure • affichage • production de formulaire d'insertion / modification • chargementà partir de données issues d'un formulaire / de la lecture de la base de données Programmation Web 2013-2014

  10. Conception du modèle • Classe ? • attributs • méthodes concrètes • pas de méthodes "obligatoires" • Classe abstraite ? • attributs • méthodes concrètes • méthodes abstraites "obligatoires" • Interface ? • méthodes "obligatoires" Programmation Web 2013-2014

  11. Gestion des attributs (1) • Solution classique : • ajout de données membres dans la classe concernée • impossibilité d'écrire des méthodes génériques à un niveau supérieur de la hiérarchie • gestion des étiquettes associées aux valeurs ? • Approche proposée : • tableau associatif des valeurs d’une ligne d’une tableconfinement, itération, accèsfacilité • possibilité d'écrire des méthodes génériques • tableau associatif des étiquettes associées aux valeurs • méthode d'initialisation du tableau des valeurs Programmation Web 2013-2014

  12. Conception du modèle • Classe ? • attributs • méthodes concrètes • pas de méthodes "obligatoires" • Classe abstraite ? • attributs • méthodes concrètes • méthodes abstraites "obligatoires" • Interface ? • méthodes "obligatoires" Programmation Web 2013-2014

  13. Approche proposée • Constitution d'une classe générique : • tableau associatif des valeurs • Clés = noms des champs de la table • Valeurs = valeurs d'une ligne de la table Auteur class Auteur extends Enregistrement Enregistrement __construct() initAttributs() Enregistrement __construct() initAttributs() Initialisation de l'objet Lecture dans la BD Création de l'objet Programmation Web 2013-2014

  14. Gestion des attributs (2) class Enregistrement { // Attributs de l'enregistrement protected$valeurs=array(); /* Initialisation des noms des champs qui sont les clés du tableau $valeurs */ protectedfunction initAttributs( $_cles/* Tableau des clés */) { $this->valeurs =array(); foreach(array_keys($_cles)as$cle) $this->valeurs[$cle]=null; } Programmation Web 2013-2014

  15. Accès aux attributs • Solutions possibles : • Accès R/W par $aut->valeurs['AUTID'] • Accès R par $aut->donne('AUTID')Accès W par $aut->affecte('AUTID', 12) • Accès R/W par $aut->AUTID • Confinement  • Itération possible  • Accès sûr ? • Accès simple ? Auteur Enregistrement __construct() initAttributs() $valeurs doit être public! Syntaxe assez lourde Surcharge de __get() et __set()     Programmation Web 2013-2014

  16. Gestion des attributs (3) /* Surcharge de __get pour donner accès aux valeurs sous la forme $e->un_champs */ publicfunction__get( $_cle/** Nom du champs */){ if(array_key_exists($_cle, $this->valeurs)) return$this->valeurs[$_cle]; thrownewException( "Champs '$_cle' inconnu dans '" .get_class($this)."'"); } Programmation Web 2013-2014

  17. Gestion des attributs (4) /* Surcharge de __set pour donner accès aux valeurs sous la forme $e->un_champs=val */ publicfunction__set( $_cle/** Nom du champs */, $_val/** Nouvelle valeur */){ if(array_key_exists($_cle, $this->valeurs)) return$this->valeurs[$_cle]=$_val; thrownewException( "Champs '$_cle' inconnu dans '" .get_class($this)."'"); } Programmation Web 2013-2014

  18. Gestion des étiquettes • Valeurs : • Tableau associatif au niveau de la classe mère • Accès simple à l'aide de __get et __set • Traitements au niveau de la classe mère • Méthode d'initialisationinitAttributs($_cles) • Étiquettes : • Tableau associatif • Propriété de la classe mère ? • Communes à toutes les entités d'une classe dérivée  Attribut statique de la classe dérivée  Méthode abstraite etiquettes()(classe mère)  Utilisable pour l'initialisation des attributs Programmation Web 2013-2014

  19. Conception du modèle • Classe ? • attributs • méthodes concrètes • pas de méthodes "obligatoires" • Classe abstraite ? • attributs • méthodes concrètes • méthodes abstraites "obligatoires" • Interface ? • méthodes "obligatoires" Programmation Web 2013-2014

  20. Définition des méthodes (1) • Chargement de données : • à partir de données issues d'un formulaire (tableau) • à partir de la lecture de la base de données (tableau) • possible si les clés de ces tableaux sont identiques à celles du tableau des valeurs • démarche : pour chaque clé du tableau des valeurs, si cette dernière est présente dans le tableau des données fournies alors affecter la valeur fournie • implémentation possible dans la classe mère Programmation Web 2013-2014

  21. Définition des méthodes (2) • Lecture BD nécessite : • de connaître la table • de connaître la clé primaire • de transférer les données lues dans les valeurs • Écriture BD nécessite : • de connaître la table • de connaître la clé primaire • de savoir si l'on doit inséreroumettre à jour la table lecture préalable • de disposer des valeurs Programmation Web 2013-2014

  22. Définition des méthodes (3) • Connaître la table : • Donnée des classes dérivées • A la charge des classes dérivées • Obligation d'implémentation méthode abstraite table() de la classe mère • Connaître la clé primaire : • Donnée des classes dérivées • A la charge des classes dérivées • Obligation d'implémentation méthode abstraite cle_pri() de la classe mère Programmation Web 2013-2014

  23. Bilan (partiel) des méthodes Auteur Enregistrement table()"Auteur" cle_pri()"AUTID" etiquettes()… __construct() initAttributs() lecture() ecriture() Enregistrement table() cle_pri() etiquettes() __construct() initAttributs() lecture() ecriture() class Auteur extends Enregistrement Programmation Web 2013-2014

  24. Définition des méthodes (4) • Lecture : • table / clé primaire connues • SELECT * FROM table WHERE clé_pri=id • Chargement • Écriture : • table / clé primaire connues • Si id existe dans la base  mise à jour • SELECT COUNT(*) FROM table WHERE clé_pri=id == 1  UPDATEtable WHERE clé_pri=id • Sinon  insertion • SELECT COUNT(*) FROM table WHERE clé_pri=id== 0  INSERT INTO table Programmation Web 2013-2014

  25. Définition des méthodes (5) • Affichage : • Peut être fait de façon générique grâce au parcours des attributsetétiquettes • Serait plus judicieux d'être spécialisé par les classes dérivées • Production de formulaire : • Éléments de formulaire et non formulaire complet • Peut être fait de façon générique grâce au parcours des attributs et étiquettes • Serait plus judicieux d'être spécialisé par les classes dérivées Programmation Web 2013-2014

  26. Bilan (1) abstractclass Enregistrement { protected$valeurs=array(); abstractpublicfunction__construct($_id=null) ; protectedfunction initAttributs($_cles) { … } abstractprotectedfunction table() ; abstractprotectedfunction cle_pri(); abstractpublic function etiquettes(); publicfunction etiquette($_cle){ … } publicfunction lecture($_id){ … } publicfunction ecriture() { … } publicfunction chargement($_donnees){ … } publicfunction affichage(){ … } publicfunction formulaire() { … } Programmation Web 2013-2014

  27. Bilan (2) publicfunction__get($_cle) { … } publicfunction__set($_cle, $_val) { … } publicfunction__isset($_cle) { … } publicfunction__unset($_cle){ … } } // Fin class Enregistrement class Etendue extends Enregistrement { const table = "la_table" ; const cle_pri = "LA_CLE_PRI" ; staticprivate$labels =array('XXXXX' => 'Etiquette X', ...); publicfunction__construct($_id=null){ $this->initAttributs(self::$labels); if(isset($_id)) $this->lecture($_id); } Programmation Web 2013-2014

  28. Bilan (3) protectedfunction table(){ returnself::table ; } protectedfunction cle_pri(){ returnself::cle_pri ; } protectedfunction etiquettes(){ returnself::$labels; } publicfunction affichage(){ // ... } publicfunction formulaire(){ // ... } } // Fin class Etendue Programmation Web 2013-2014

  29. Implémentations plus élaborées Requête d'information Liste des champs Nature des champs Type de clé Programmation Web 2013-2014

More Related