TP2 Prgrammatin Web - Crrectin Un Chat en PHP On veut réaliser une applicatin de chat en ligne. Chaque visiteur s identifie à sn arrivée, ce qui lui permet d apparaître dans l annuaire des persnnes cnnectées. Grâce à cet annuaire, les différents utilisateurs vnt puvir se cntacter et échanger des messages. Naturellement, chaque habitué du système peut créer sn annuaire persnnel pur référencer ses amis et ne pas avir à les chercher dans la liste lrs de ses visites successives. 1. Cmpsez un cahier des charges : a. Inscriptin préalable. L inscriptin permettra au visiteur de se cnstituer un prtrait : nm de cde, âge, sexe, pays, ville, emticne. b. Une identificatin à chaque visite : une fis inscrit le visiteur devra s identifier lrs de chaque visite. Il précisera sn nm de cde et le mt de passe qu il a chisi. Ceci fera apparaitre sn prtrait dans l annuaire, en le rendant visible aux yeux des autres cnnectés. c. Tableau de brd. Une fis cnnecté, le visiteur dit puvir accéder à tris grupes de fnctins : i. Parcurs de l annuaire des cnnectés ii. iii. Parcurs de la liste des amis Lecture et écriture des messages. 2 Décupez de plus en plus finement l applicatin et les éléments qui la cmpsent en utilisant le mdèle d architecture Mdèle, Vue, Cntrôleur (MVC). Les flux d infrmatin dans Chat PHP : Vue : A partir d un dcument XML (XHTML dans le cas général) et d un patrn XSL la vue génère une srtie. Cntrôleur : Prducteur du dcument XML qui est transfrmé par la vue. On peut identifier différents flux : Les échanges liés a l identificatin et au cntrôle de la sessin utilisateur La manipulatin de la liste des abnnés La gestin de la liste des amis La manipulatin des messages
Mdèle : l'ensemble de ces flux d infrmatin snt à destinatin u à l rigine du mdèle 3. Les interfaces en PHP décrivent les pré-requis d une spécificatin, prérequis auxquels tute implémentatin dit se cnfrmer. Ces pré-requis snt dnnés en listant les prttypes des méthdes qui devrnt exister dans l'implémentatin. Dans Chat PHP: 1. La vue. Sn seul rôle est de transfrmer le dcument XML : interface ivue{ functin transfrme($dcument, $style) ;} 2. Le cntrôleur. La plupart des flux d infrmatin que nus avns détectés snt liés aux mdèles. Le cntrôleur se cntente de réaliser les traitements sur les dnnées du mdèle. La seule méthde indispensable d un cntrôleur est celle qui est respnsable de la prductin du dcument XML. interface icntrleur { functin genere() ;} 3. Le mdèle. Il nus furnira le myen d'accéder aux dnnées. On va définir une interface prpre pur chaque type de dnnées manipulé. a. Les dnnées de sessin : L bjet sessin est lui-même élémentaire. Sn rôle cnsistera à gérer un cmpteur de temps. Lrsque l utilisateur est actif, le cmpteur est mis à jur et chaque page PHP du Chat teste la date de dernière mise à jur via ntre bjet sessin, pur décider de l expiratin u nn de la sessin en curs. Deux méthdes divent être implantées pur tut bjet sessin : i. La mise à jur du cmpteur de sessin pur préserver sa validité ; ii. Le test d'expiratin interface isessin { functin update() ; functin active() ;} b. Les listes d infrmatin. Le Chat en PHP manipule de nmbreuses listes, parmi lesquelles les listes de cnnectés et les listes d amis. On peut dnc lgiquement utiliser un design pattern très classique : l itérateur.
interface Iteratr implements Traversable { functin rewind() ; functin current() ; funtin key() ; functin next () ; functin valid() ;} Cette interface est utilisée par PHP lui-même pur certaines pératins, telles que l instructin freach, par exemple. c. Les messages. La gestin des messages cmprte tris actins clés : i. La transmissin effective d un message à un interlcuteur ii. iii. La créatin du frmulaire d envi L affichage du fil de discussin en curs Pur les premières étapes n prpse une interface : interface imessage { functin nuveau() ; functin transmet() ;} Pur le fil de la discussin n retruve le parcurs classique d une liste interface imessage extends iteratr { functin nuveau() ; functin transmet() ;} 4. Mdèle de dnnées. Dans Chat PHP n va cnfier le stckage permanent des infrmatins cntenues dans les bjets à un SGBD. Le mdèle de dnnées cnstitue cette descriptin de l infrmatin à stcker. Il existe plusieurs méthdes pur représenter et décrire ce mdèle (Merise, UML etc.) Réalisez le mdèle de dnnées cnceptuel de Chat PHP. Implémentez ce mdèle en utilisant EasyPhp.
5. Les bjets dans PHP5 : a. Pur les bjets utilisateur n purra définir une classe de cette façn : private $pseud ; private $passwrd ; functin changepseud ($nuveau_pseud) { $this -> pseud = $nuveau_pseud ;} functin changepasswrd($nuveau_passwrd) { $this -> passwrd = $nuveau_passwrd ;} functin litpseud() { Return $pseud ;} functin litpasswrd() { Return $passwrd ;}}} Le cde suivant prvque alrs une erreur : $u = new utilisateur () ; $u -> pseud = tt ; Pur que le cde fnctinne il faut écrire : $u = new utilisateur ( bla, bla ) ; b. L'héritage class utilisateurabnne extends utilisateur { private $numer_client ; functin lit_numer_client() { return $this -> numer_client ;}} class utilisateurabnne extends utilisateur implements iutilisateur, iabnne { //cde de la classe}
c. On purrait définir utilisateur cmme une classe abstraite, dnt n purrait dériver ensuite une classe utilisateur_chatphp. Il est pssible d abutir à un résultat apprchant en impsant une interface a la classe utilisateur_chatphp. A l ppsé des classes abstraites PHP 5 intègre aussi la ntin de classe finale (classes qui ne purrnt pas être étendues). Une classe, cmme une méthde, peut être déclarée finale. final functin cnnecte() { // cde}} d. Plymrphisme On cnfnd parfis la redéfinitin de certaines méthdes dans les cas du plymrphisme et de la surcharge de méthdes. La surcharge cnsiste à définir des méthdes distinctes en utilisant le même nm mais des prttypes différents. PHP 5 ne supprte pas la surcharge. Le plymrphisme cnsiste à remplacer une méthde par une autre. functin infrmatin() { return Utilisateur invité ;}} class utilisateur_abnne extends utilisateur { functin infrmatin(){ expiratin}. ;}} return Vus etes abnne(e) jusqu au {$this -> e. Cnstructeurs et destructeurs private $pseud ; private $mtdepasse ; private $age ; $age=18) { functin cnstruct ($pseud=false, $mtdepasse = false, $this->pseud=$pseud;
$this->mtdepasse=$mtdepasse; $this->age=$age;} // } Lrs de la créatin d un bjet, les différents attributs snt alrs autmatiquement initialisés, sit avec les valeurs par défaut, sit avec des valeurs furnies lrs de la créatin : $u = new utilisateur ( PHPFan, Secret, 32) Cnsidérns maintenant la classe utilisateur_abnne : class utilisateur_abnne extends utilisateur { functin cnstruct() { // } // } La créatin d un utilisateur abnné va prvquer l appel du cnstructeur de cette même classe, mais nn l appel au cnstructeur de la classe utilisateur. On peut chisir explicitement d appeler u nn le cnstructeur parent : class utilisateur_abnne extends utilisateur { functin cnstruct() { // parent :: cnstruct() ; } // }