Vous êtes sur la page 1sur 4

L3 MIASHS – Année 2019-2020

Programmation web
TD n° 1 : Bases de PHP objet
J. Darmont (http://eric.univ-lyon2.fr/jdarmont/), 18/02/20

On souhaite programmer en PHP une page web dont l’aspect sera le suivant.

http://eric.univ-lyon2.fr/jdarmont/docs/web/td1.php?taille=6

Préambule

Afficher la page http://eric.univ-lyon2.fr/jdarmont/docs/web/squelette.html, puis son code HTML (clic droit,


code source). Copier/coller le début du code jusqu’à la balise <body> incluse dans un fichier Notepad++ et le
sauvegarder sous le nom entete.inc.html. Faire de même avec la fin du fichier squelette (balises </body> et
</html>) et sauvegarder le nouveau fichier sous le nom pied.inc.html. L’objectif est de séparer au maximum le
code HTML du code PHP qui va être développés ci-dessous.

Classe, constructeur et instanciation

1. Créer un fichier nommé td1.php. Ouvrir et fermer les balises PHP. Inclure les fichiers entete.inc.html et
pied.inc.html.
2. Dans td1.php, entre les deux inclusions de fichiers de la question 1, créer une classe HelloWord contenant
un attribut privé $n (lui affecter une valeur par défaut quelconque directement dans la déclaration) et une
méthode publique retournerN() qui retourne la valeur de l’attribut $n.
3. À la suite, créer un objet $h de classe HelloWorld et afficher le résultat de l’appel à la méthode
retournerN() pour $h.
4. Téléverser avec un logiciel FTP les fichier entete.inc.html, pied.inc.html et td1.php sur phpetu.univ-
lyon2.fr (utiliser vos identifiants de messagerie Lyon 2 et le protocole sécurisé SFTP pour vous
connecter), dans le répertoire Sites. Le résultat peut être visualisé depuis un navigateur web à l’URL
https://phpetu.univ-lyon2.fr/~votreLogin/td1.php.
5. Est-il possible d’afficher la valeur de l’attribut $n de $h sans passer par la méthode retournerN() ?
6. Supprimer la valeur par défaut de $n dans la classe HelloWorld et créer à la place un constructeur qui
permet d’initialiser $this->n à la création d’un objet. Modifier la création de l’objet $h en conséquence.
Sauvegarder. Tester comme à la question 4.

Héritage et polymorphisme

1. Toujours dans le fichier td1.php, créer une classe Tableau contenant un attribut privé $t, un constructeur
qui affecte à $this->t un paramètre tableau $param_tab, et une méthode publique retourne() qui renvoie
$this->t.

L3 MIASHS – Programmation web – TD 1 1/2


2. Créer un objet $tab de classe Tableau avec en paramètre un tableau scalaire de chaînes de caractères
avec quelques valeurs (ex. chaîne0, chaîne1, chaîne2…). Afficher le résultat de la méthode retourne()
appliquée à $tab sous la forme d’une liste numérotée HTML. Tester.
3. Créer une classe Matrice qui hérite de la classe Tableau et une méthode publique somme() qui retourne
la somme des valeurs contenues dans la matrice $this->t, à l’aide de deux boucles « pour tout élément »
imbriquées.
4. Créer un objet $mat de classe Matrice avec en paramètre un tableau numérique à deux dimensions (voir
exemple ci-contre). Afficher le résultat de la méthode somme() appliquée à $mat.

1 3 5
 
9 0 2
5. Afficher le résultat de la méthode héritée retourne() appliquée à $mat sous la forme d’une liste à puces
HTML. Tester. Conclusion ?
6. Nous allons surcharger la méthode retourne(). Pour cela, ajouter dans la classe Matrice une méthode
retourne() qui, à l’aide de deux boucles « pour tout élément » imbriquées, retourne un tableau
unidimensionnel qui contient toutes les valeurs de la matrice $this->t. Tester.
7. Que faut-il changer dans la classe Tableau pour que cela fonctionne ?

Un peu plus près des étoiles

1. Toujours dans le fichier td1.php, créer une classe Triangle contenant un attribut privé $taille, un
constructeur qui affecte un paramètre entier $param_taille (de valeur par défaut 5) à $this->taille, et une
méthode publique dessiner() qui retourne une chaîne de caractères représentant un triangle rectangle
constitué de caractères * (utiliser la balise HTML <br /> pour les sauts de ligne). Notons que $this->taille
est le nombre de lignes dans l’exemple ci-dessous. Créer un objet $tri1 de classe Triangle (ne pas
indiquer de paramètre) et afficher le résultat de la méthode dessiner() pour $tri1.
Ex. ($tri1) *
**
***
****
*****
2. Ajouter dans le constructeur de la classe Triangle des tests sur la valeur de $param_taille. Si elle est
supérieure à 20, $this->taille doit être égale 20 ; et si elle est inférieure ou égale à 0, $this->taille doit être
égale 5. Créer deux objets $tri2 et $tri3 de classe Triangle et de taille 50 et -5, respectivement. Afficher
le résultat de la méthode dessiner() pour $tri2 et $tri3.
3. Créer un objet $tri4 de classe Triangle et de taille $_GET["taille"]. Afficher le résultat de la méthode
dessiner() pour $tri4 en ajoutant dans l’URL de la page td1.php la chaîne « ?taille=6 » (cf. page exemple).

Bibliothèque de classes

Placer les classes HelloWorld, Tableau, Matrice et Triangle dans un fichier séparé nommé td1.class.php.
Supprimer le code correspondant dans le fichier td1.php et y inclure à la place le fichier td1.class.php, avant
les créations d’objets et les appels aux méthodes. Tester.

Validation HTML

Vérifier que le code HTML5 produit à l’aide de PHP (affichage du code source dans le navigateur) est valide
en le copiant/collant dans https://validator.w3.org. Corriger les erreurs le cas échéant, jusqu’à ce que votre
code soit valide.
L3 MIASHS – Programmation web – TD 1 2/2
Correction

<!DOCTYPE html> <!-- entete.inc.html -->

<html lang="fr">

<head>
<meta charset="utf-8" />
<title>Programmation web - TD</title>
<meta name="Author" content="Jérôme Darmont" />
<meta name="Keywords" content="Web,PHP objet" />
</head>

<body>

<!-- pied.inc.php -->

<p><a href="http://validator.w3.org/check?uri=referer">Validation HTML5</a></p>

</body>
</html>

<?php // td1.class.php

class HelloWorld {
private $n;
function __construct($param_n) {
$this->n = $param_n;
}
public function retournerN() {
return $this->n;
}
}

class Tableau {
// private $t;
protected $t;
function __construct($param_tab) {
$this->t = $param_tab;
}
public function retourne() {
return $this->t;
}
}

class Matrice extends Tableau {


public function somme() {
$somme = 0;
foreach ($this->t as $ligne)
foreach ($ligne as $valeur)
$somme += $valeur;
return $somme;
}
public function retourne() {
foreach ($this->t as $ligne)
foreach ($ligne as $valeur)
$tab_res[] = $valeur;
return $tab_res;
}
}

L3 MIASHS – Programmation web – TD 1 3/2


class Triangle {
private $taille;
function __construct($param_taille = 5) {
if ($param_taille > 20)
$this->taille = 20;
elseif ($param_taille <= 0)
$this->taille = 5;
else
$this->taille = $param_taille;
}
public function dessiner() {
$ligne = "";
$triangle = "<p>";
for ($i = 1; $i <= $this->taille; $i++) {
$ligne .= "*";
$triangle .= $ligne . "<br />";
}
return $triangle;
}
}
?>

<?php // td1.php

// Entête HTML
include("entete.inc.html");

// Appel au fichier des classes


require("td1.class.php");

// Hello world!
$h = new HelloWorld(42);
echo "<p>\$n = " . $h->retournerN() . "</p>";
// echo $h->n; ne fonctionne pas car $n est un attribut privé

// Tableaux & co
$tab = new tableau(array("TF1", "France 2", "France 3"));
echo "<ol>";
foreach ($tab->retourne() as $valeur)
echo "<li>$valeur</li>";
echo "</ol>";
//
$mat = new Matrice(array( array(1, 3, 5),
array(9, 0, 2) ) );
echo "<p>somme = " . $mat->somme() . "</p>";
echo "<ul>";
foreach ($mat->retourne() as $valeur)
echo "<li>$valeur</li>";
echo "</ul>";

// Etoiles et toiles (bogues ?)


$tri1 = new Triangle();
echo $tri1->dessiner();
$tri2 = new Triangle(50);
echo $tri2->dessiner();
$tri3 = new Triangle(-5);
echo $tri3->dessiner();
$tri4 = new Triangle($_GET["taille"]);
echo $tri4->dessiner();

// Pied de page HTML


include("pied.inc.html");
?>

L3 MIASHS – Programmation web – TD 1 4/2

Vous aimerez peut-être aussi