Programmation objet
Vous pouvez récupérer sur le projet git
https://dwarves.iut-fbleau.fr/git/monnerat/wim21.git
pour chaque exercice un squelette à compléter.
Voici la définition d'une classe personne
:
<?php class personne { public $id=null; public $nom; public $prenom; } ?>
Ajoutez :
__construct
__toString
Testez
contact
en rajoutant un attribut email
. Rédéfinissez le constructeur et la méthode
d'affichage.
On veut stocker nos contacts dans une base de données. Créez une table correspondante sur le serveur mysql.
Le dialogue avec le serveur, établi au moyen de PDO,
sera centraliser dans une classe
Database
:
<?php class Database { static protected $_instance = null; protected $_db; static public function getInstance() { } public function query($sql){ } public function prepare($sql){ } public function lastId(){ } protected function __construct() { } } ?>
Compléter la classe
Le lien ($_db
) avec la base mysql sera aussuré par un objet de type PDO.
La classe Database implante le patron de conception singleton. Le principe est de restreindre l'instanciation de la classe à un seul objet, ici pour éviter les connexions multiples au serveur de bases de données.
La classe contient la méthode statique getInstance
qui crée une instance uniquement s'il n'en existe pas encore. Sinon elle renvoie une référence vers l'objet qui existe déjà $_instance
.
Le constructeur n'est pas accessible de l'extérieur, et c'est lui qui établira la connexion avec le serveur en stockant le lien dans $_bd
.
query
et prepare
encapsule les méthodes du même nom de PDO.
lastId
encapsute la méthode lastInsertId de PDO.
Ajoutez à la classe contact
les méthodes
public static function getFromId($id) public static function getList() public function save()
qui permettent de récupérer des contacts depuis la base de données, et de sauver un contact.
Testez
RemarqueOn peut récupérer avec PDO, directement le(s) résultat(s) d'un select en précisant le "fetchMode" :
$stmt->setFetchMode(PDO::FETCH_CLASS, "contact")
Il est à noter que le constructeur de la classe (s'il y en a un) est appelé après. Vous pouvez inverser l'ordre d'appel avec :
$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE , "contact")
Ecrire une page qui affiche, en utilisant tout ce qui précéde, la liste des tous les contacts
Dans l'affichage précédent, on veut que chaque contact soit un lien que l'on puisse ouvrir dans une nouvelle page.
Ajouter dans la classe contact
une méthode afficherLienHtml
qui permet de formater le lien :
<a target="_blank" href="./editer.php?id=3">Denis Monnerat</a>