Écrivez une classe représentant une ville. Elle doit avoir les propriétés nom et département et une méthode affichant « la ville X est dans le département Y ». Créez des objets ville, affectez leurs propriétés, et utilisez la méthode d’affichage.
<?php class ville { public $nom; public $depart; public function getinfo() { $texte="La ville de $this->nom est dans le département : $this- >depart <br />"; return $texte; } } //Création d'objets $ville1 = new ville(); $ville1->nom="Nantes"; $ville1->depart="Loire Atlantique"; $ville2 = new ville(); $ville2->nom="Lyon"; $ville2->depart="Rhône"; echo $ville1->getinfo(); echo $ville2->getinfo(); ?>Le résultat affiché est :
Modifiez la classe précédente en la dotant d’un constructeur. Réalisez les mêmes opérations de création d’objets et d’affichage.
<?php class ville { private $nom; private $depart; public function __construct($nom,$depart) { $this->nom=$nom; $this->depart=$depart; } public function getinfo() { $texte="La ville de $this->nom est dans le département : $this- >departLe résultat affiché est :
"; return $texte; } } //Création d'objets $ville1 = new ville("Nantes","Loire Atlantique"); $ville2 = new ville("Lyon","Rhône"); echo $ville1->getinfo(); echo $ville2->getinfo(); ?>
Créez une classe représentant une personne. Elle doit avoir les propriétés nom, prénom et adresse, ainsi qu’un constructeur et un destructeur. Une méthode getpersonne() doit retourner les coordonnées complètes de la personne. Une méthode setadresse() doit permettre de modifier l’adresse de la personne. Créez des objets personne, et utilisez l’ensemble des méthodes.
<?php class personne { private $nom; private $prénom; private $adresse; //Constructeur public function __construct($nom,$prénom,$adresse) { $this->nom=$nom; $this->prénom=$prénom; $this->adresse=$adresse; } //Destructeur public function __destruct() { echo "<script type=\"text/javascript\">alert('La personne nommée $this->prénom $this->nom \\nest supprimée de vos contacts')</script>"; } // public function getpersonne() { $texte=" $this->prénom $this->nom <br /> $this->adresse <br />"; return $texte; } // public function setadresse($adresse) { $this->adresse=$adresse; } } //Création d'objets $client = new personne("Geelsen","Jan"," 145 Rue du Maine Nantes"); echo $client->getpersonne(); //Modification de l'adresse $client->setadresse("23 Avenue Foch Lyon"); //Suppression explicite du client, donc appel du destructeur unset($client); //Fin du script echo "Fin du script"; ?>Notez l’ordre d’apparition de la boite d’alerte créée par le destructeur après l’appel de la fonction unset() et de l’affichage de la fin du script.
Créez une classe nommée form représentant un formulaire HTML. Le constructeur doit créer le code d’en-tête du formulaire en utilisant les éléments <form> et <fieldset>. Une méthode settext() doit permettre d’ajouter une zone de texte. Une méthode setsubmit() doit permettre d’ajouter un bouton d’envoi. Les paramètres de ces méthodes doivent correspondre aux attributs des éléments HTML correspondants. La méthode getform() doit retourner tout le code HTML de création du formulaire. Créez des objets form, et ajoutez-y deux zones de texte et un bouton d’envoi. Testez l’affichage obtenu. Le fichier contenant la définition de la classe form (ch9exo4.php) est indépendant ce qui permet son inclusion dans d’autres scripts en vue de l’utilisation de la classe ou de son extension.
<?php class form { protected $code; protected $codeinit; protected $codetext; protected $codesubmit; public function __construct($action,$titre,$methode="post") { $this->codeinit="<form action=\"$action\" method=\"$methode\">"; $this->codeinit.="<fieldset><legend><b>$titre</b></legend>"; //$this->action = $action; //$this->methode=$methode; } //******************************************** public function settext($name,$libelle,$methode="post") { $this->codetext.="<b>$libelle</b><input type=\"text\" name=\"$name\" /><br /><br />"; } //************************************************ public function setsubmit($name="envoi",$value="Envoyer") { $this->codesubmit="<input type=\"submit\" name=\"$name\" value=\"Envoyer\"/><br />"; } //************************** public function getform() { $this->code=""; $this->code.=$this->codeinit; $this->code.=$this->codetext; $this->code.=$this->codesubmit; $this->code.="</fieldset></form>"; echo $this->code; } } ?>Le fichier ch9exo4b.php inclus le fichier précédent et creé un objet de type form.
<?php include('ch9exo4.php'); //*************************** $myform = new form("traitement.php","Accès au site","post"); $myform->settext("nom","Votre nom : "); $myform->settext("code","Votre code : "); $myform->setsubmit(); $myform->getform(); ?>Voir le résultat
Créez une sous-classe nommée form2 en dérivant la classe form de l’exercice 4. Cette nouvelle classe doit permettre de créer des formulaires ayant en plus des boutons radio et des cases à cocher. Elle doit donc avoir les méthodes supplémentaires qui correspondent à ces créations. Créez des objets, et testez le résultat.
<?php include('ch9exo4.php'); class form2 extends form { protected $coderadio; protected $codecase; public function __construct($action,$titre,$methode="post") { parent::__construct($action,$titre,$methode="post"); } //******************************************** public function setradio($name,$libelle,$value) { $this->coderadio.="<b>$libelle</b><input type=\"radio\" name=\"$name\" value=\"$value\"/><br />"; } //************************************************ public function setcase($name,$libelle,$value) { $this->codecase.="<b>$libelle</b><input type=\"checkbox\" name=\"$name\" value=\"$value\" /><br />"; } //************************** public function getform() { $this->code=""; $this->code.=$this->codeinit; $this->code.=$this->codetext; $this->code.=$this->coderadio; $this->code.=$this->codecase; $this->code.=$this->codesubmit; $this->code.="</fieldset></form>"; echo $this->code; } } //*************************** $myform = new form2("traitementb.php","Coordonnées et sports préférés","post"); $myform->settext("nom","Votre nom : "); $myform->settext("code","Votre code : "); $myform->setradio("sexe"," Homme ","homme"); $myform->setradio("sexe"," Femme ","femme"); $myform->setcase("loisir"," Tennis ","tennis"); $myform->setcase("loisir"," Equitation ","équitaion"); $myform->setcase("loisir"," Football ","football"); $myform->setsubmit(); $myform->getform(); ?>Voir le résultat
Créez un objet à partir de la classe form2 de l’exercice 5, puis créez-en un clone. Modifiez certaines caractéristiques de cet objet, et affichez les deux formulaires obtenus.
<?php include('ch9exo4.php'); class form2 extends form { protected $coderadio; protected $codecase; public function __construct($action,$titre,$methode="post") { parent::__construct($action,$titre,$methode="post"); } //******************************************** public function setradio($name,$libelle,$value) { $this->coderadio.="<b>$libelle</b><input type=\"radio\" name=\"$name\" value=\"$value\"/><br />"; } //************************************************ public function setcase($name,$libelle,$value) { $this->codecase.="<b>$libelle</b><input type=\"checkbox\" name=\"$name\" value=\"$value\" /><br />"; } //************************** public function getform() { $this->code=""; $this->code.=$this->codeinit; $this->code.=$this->codetext; $this->code.=$this->coderadio; $this->code.=$this->codecase; $this->code.=$this->codesubmit; $this->code.="</fieldset></form>"; echo $this->code; } } //*************************** $myform = new form2("traitementb.php","Donnez vos informations","post"); $myform->settext("nom","Votre nom : "); $myform->settext("code","Votre code : "); $myform->setsubmit(); $myform->getform(); $myclone = clone $myform; $myclone->settext("truc","Votre truc : "); $myclone->getform(); ?>Voir le résultat
Créez une classe abstraite représentant une personne. Elle déclare les propriétés nom et prénom et un constructeur. Créez une classe client dérivée de la classe personne en y ajoutant la propriété adresse et une méthode setcoord() qui affiche les coordonnées complètes de la personne. Créez une classe électeur dérivée de la même classe abstraite, et ajoutez-y deux propriétés bureau_de_vote et vote, ainsi qu’une méthode avoter(), qui enregistre si une personne a voté dans la propriété vote. Les propriétés nom et prenom qui sont déclarées private dans la classe abstraite (repères 1 et 2) sont redéfinies comme public dans la classe electeur (repères 3 et 4) car sinon nous ne pourrions pas les lire lors du contrôle du vote( repères 5 et 6) car la classe electeur ne possède pas de méthode getinfo().
<?php //Classe personne abstract class personne { private $nom;//1 private $prenom;//2 abstract protected function __construct() ; } //Classe client class client extends personne { private $adresse; public function __construct($nom,$prenom,$adresse) { $this->nom=$nom; $this->prenom=$prenom; $this->adresse=$adresse; } public function getcoord() { $info="Le client $this->prenom $this->nom habite $this->adresse <br />"; return $info; } } //Classe electeur class electeur extends personne // { public $nom;//3 public $prenom;//4 public $bureau_de_vote; public $vote; function __construct($nom,$prenom,$bureau_de_vote) { $this->nom=$nom; $this->prenom=$prenom; $this->bureau_de_vote=$bureau_de_vote; } public function avoter() { $this->vote=TRUE; } } //Création d'objets $client1 = new client("Delmas","Jacquou","Bordeaux"); echo "<h4>", $client1->getcoord()," </h4>"; $electeur1 = new electeur("Tinitin","Milan","Brussel 5"); //L'électeur vote $electeur1->avoter(); //Controle du vote if($electeur1->vote) {echo "L'électeur $electeur1->prenom $electeur1->nom inscrit au bureau $electeur1->bureau_de_vote a voté <br />";}//5 else {echo "L'électeur $electeur1->prenom $electeur1->nom inscrit au bureau $electeur1->bureau_de_vote peut encore voter <br />";}//6 ?>Voir le résultat
Exercice 8
Créez deux namespaces nommés Firme::Client et Firme::Commercial possédant chacun des classes Personne. Chacune d'elles doit avoir des propriétés pour enregistrer les coordonnées de la personne et son code, un constructeur, des méthodes set() et get() pour pouvoir modifier et afficher les propriétés. Créez ensuite des objets représentant deux clients et un commercial.
Création du namespace Firme\Client fichier chap9exo8.php
NB1: la notation est celle de 5.3 antislash \ entre Firme et Client
<?php namespace Firme\Client; class Personne { public $nom; public $prenom; public $adresse; public $ville; public $code; public function __construct($nom,$prenom,$adresse,$ville,$code) { $this->nom=$nom; $this->prenom=$prenom; $this->adresse=$adresse; $this->ville=$ville; $this->code=$code; } public function set($prop, $val) { echo "Affectation de la valeur $val à la propriété $prop <br /> "; $this->$prop = $val; } public function get($prop) { return $this->$prop; } } ?>Création du namespace Firme\Commercial fichier chap9exo8a.php
<?php namespace Firme\Commercial; class Personne { public $nom; public $prenom; public $adresse; public $ville; public $code; public function __construct($nom,$prenom,$adresse,$ville,$code) { $this->nom=$nom; $this->prenom=$prenom; $this->adresse=$adresse; $this->ville=$ville; $this->code=$code; } public function set($prop, $val) { echo "Affectation de la valeur $val à la propriété $propUtilisation des namespaces. fichier chap9exo8b.php
"; $this->$prop = $val; } public function get($prop) { return $this->$prop; } } ?>
<?php require 'chap9exo8.php'; require 'chap9exo8a.php'; echo "<h2>Objets Client</h2>"; use Firme\Client; $client1 = new Client\Personne("Engels","Jean"," Rue Compoint","75018 Paris",12345); echo $client1->get("nom")," ",$client1->get("prenom"),"<br />"; //ou encore plus simpement, car les propriétés sont déclarées public echo $client1->nom," ",$client1->prenom,"<br />"; $client1->set("code",45678); echo "Nouveau code : ",$client1->code,"<br />"; $client2 = new Client\Personne("Jacket","Gene"," Rue Gargas","84018 Apt",54367); echo $client2->get("nom")," ",$client2->get("prenom"),"<br />"; //ou encore plus simplement, car les propriétés sont déclarées public echo $client2->nom," ",$client2->prenom,"<br />"; $client2->set("code",12876); echo "Nouveau code : ",$client2->code,"<br />"; echo "<h2>Objet Commercial</h2>"; use Firme\Commercial; $comm = new Commercial\Personne("Attin","Bar"," Rue Foch","75016 Paris",98765); echo $comm->get("nom")," ",$comm->get("prenom"),"<br />"; //ou encore plus simpement, car les propriétés sont déclarées public echo $comm->nom," ",$comm->prenom,"<br />"; $comm->set("code",76543); echo "Nouveau code : ",$comm->code,"<br />"; ?>Ce serveur n'utilise pas encore PHP 5.3: testez sur Wampserver en local.
Intégrez les méthodes magiques connues à au moins une des classes de l'exercice 8 après avoir déclaré la propriété code comme protected.
Création du namespace Firme\Client fichier chap9exo9.php
<?php namespace Firme\Client; class Personne { protected $nom; public $prenom; public $adresse; public $ville; protected $code; public function __construct($nom,$prenom,$adresse,$ville,$code) { $this->nom=$nom; $this->prenom=$prenom; $this->adresse=$adresse; $this->ville=$ville; $this->code=$code; } public function __set($prop, $val) { echo "Affectation de la valeur $val à la propriété $prop <br /> "; $this->$prop = $val; } public function __get($prop) { return $this->$prop; } } ?>Création du namespace Firme\Commercial fichier chap9exo9a.php
<?php namespace Firme\Commercial; class Personne { public $nom; public $prenom; public $adresse; public $ville; protected $code; public function __construct($nom,$prenom,$adresse,$ville,$code) { $this->nom=$nom; $this->prenom=$prenom; $this->adresse=$adresse; $this->ville=$ville; $this->code=$code; } public function __set($prop, $val) { echo "Affectation de la valeur $val à la propriété $prop <br /> "; $this->$prop = $val; } public function __get($prop) { return $this->$prop; } } ?>Utilisation des namespaces fichier chap9exo9b.php
<?php require 'chap9exo9.php'; require 'chap9exo9a.php'; echo "<h2>Objets Client</h2>"; use Firme\Client; $client1 = new Client\Personne("Engels","Jean"," Rue Compoint","75018 Paris",12345); echo $client1->nom," ",$client1->prenom,"<br />"; $client1->code=45678; echo "Nouveau code : ",$client1->code,"<br />"; $client2 = new Client\Personne("Jacket","Gene"," Rue Gargas","84018 Apt",54367); echo $client2->nom," ",$client2->prenom,"<br />"; $client2->code=12876; echo "Nouveau code : ",$client2->code,"<br />"; echo "<h2>Objet Commercial</h2>"; use Firme\Commercial; $comm = new Commercial\Personne("Attin","Bar"," Rue Foch","75016 Paris",98765); echo $comm->nom," ",$comm->prenom,"<br />"; $comm->code=76543; echo "Nouveau code : ",$comm->code,"<br />"; ?>Ce serveur n'utilise pas encore PHP 5.3: testez sur Wampserver en local.