Bases du langage du php
Introduction
Vous allez commencer ici à utiliser PHP à travers un outil en ligne qui va vous permettre de vous approprier les bases du langage sans avoir à installer quoi que ce soit sur votre ordinateur. Cet outil propose en effet un environnement qui autorise l’exécution de code PHP saisi par l’utilisateur.
On vous propose d’utiliser le service PHP Sandbox mais il en existe d’autres (ex. : PHP Fiddle
).
Noter que dans l’exemple figurant dans le screenshot ci-dessus, la balise fermante |
💻 Travail n° 1 : Découverte du langage
À partir d’internet, de cet aide-mémoire PHP et du service PHP Sandbox
, donner les instructions ou suites d’instructions PHP qui permettent d’effectuer les opérations spécifiées dans les questions suivantes.
Exemples de sites bien utiles pour pouvoir répondre aux questions posées
|
🎯 Travail à faire :
-
Afficher la chaîne de caractères
Hello world !
avec l’instructionecho
-
Afficher la chaîne de caractères
Qui a dit : "Veni, vidi, vici" ?
avec l’instructionecho
(Noter les doubles guillemets autour de la locution latine) -
Afficher le nombre
1802
-
Déclarer, initialiser une variable numérique
anneeNaissance
avec le nombre1802
puis l’afficher -
Afficher bout à bout les 2 chaînes de caractères “Hello” et “␣world !” en n’utilisant qu’une seule instruction
echo
(→ opérateur de concaténation). -
Afficher le texte
Victor Hugo est né en 1802
en utilisant la variableanneeNaissance
.Vous utiliserez pour cela 2 méthodes :
-
concaténation d’une chaîne de caractères et d’une variable
-
évaluation de la variable au sein de la chaîne de caractères (→ variable expansion)
-
-
Déclarer, initialiser une variable booléenne à “vrai” puis l’afficher avec l’instruction
echo
, la fonctionvar_dump()
et la fonctionprint_r()
.Expliquer les différences entre ces 3 manières d’afficher une variable.
-
Définir une constante pour la valeur de PI et l’afficher.
-
Déclarer, initialiser un tableau nommé
fruits
avec les 3 fruitspomme
,abricot
,orange
puis l’afficher avecprint_r()
etvar_dump()
-
Ajouter le fruit
pêche
au tableau précédent en dehors de sa déclaration et de son initialisation réalisées à la question précédente -
Déterminer par programmation la longueur du tableau de fruits et l’afficher
-
Afficher à l’aide d’une boucle
for()
tous les élément du tableauUn retour à la ligne peut être obtenu en concaténant la constante PHP
PHP_EOL
à la chaîne à afficher. -
Modifier la déclaration et l’initialisation du tableau de fruits de façon à associer à chaque fruit une information qui indique si c’est un fruit à pépin (→ valeur
pépin
) ou à noyau (→ valeurnoyau
).Ceci consiste donc à déclarer un tableau associatif dont chaque élément sera constitué d’une paire clé/valeur avec le nom du fruit (→ clé) et son type (→ valeur :
noyau
oupépin
). -
Ajouter le fruit
cerise
au tableau précédent après son initialisation -
Afficher à l’aide d’une boucle
foreach()
tous les élément du tableau de fruits -
Ajouter une condition dans la boucle pour n’afficher que les fruits à noyau.
-
Créer une fonction utilisateur
typeFruit()
qui prend en paramètre un nom de fruit et qui retourne son type (→noyau
,pépin
) ouinconnu
lorsque celui-ci n’appartient pas au tableau des fruits. -
Créer une fonction
infoFruitPrefere()
— sans paramètre — qui vante les qualités du fruit présent dans une variable définie en dehors de ce cette fonction (→ variable globale). Ceci vous permettra de voir comment accéder à une variable globale en PHP depuis le corps d’une fonction.
💻 Travail n° 2 : Programmation objet 1/2
PHP — tout comme le langage C++ ou Python — permet de faire de la programmation objet.
Dans les questions suivantes, on vous demande donc de tranposer en PHP les principes de la programmation objet étudiés jusqu’à présent à travers du langage C++ ou de Python de façon, à se rendre compte de leur universalité.
Vous pourrez trouver des informations sur la programmation en objet en PHP sur
Apprendre à PHProgrammer |
🎯 Travail à faire :
-
Définir une classe
FormeGeometrique
possédant les attributs privés suivants :-
xOrigine
-
yOrigine
-
type
-
-
Enrichir la classe pour lui ajouter un constructeur qui initialise ses attributs
xOrigine
etyOrigine
à 0 et son attributtype
àCarré
. -
Enrichir la classe avec les méthodes magiques
__get()
et__set()
pour permettre de lire ou de modifier les valeurs de ses attributs privés.Cette fonctionnalité n’est pas disponible de base en C++ mais correspond à ce qu’on appelle des accesseurs (→ getters) ou mutateurs (→ setters) dans ce langage.
En revanche, cette fonctionnalité existe dans le langage C# à travers la notion de “propriété”.
-
Instancier la classe
FormeGeometrique
puis modifier ses attributs avant de réaliser un affichage qui renseigne sur la forme géométrique instanciée (Ex. : “L’objet présent dans la variable $maFormeGeometrique est un cercle dont les coordonnées d’origine sont (10, 50)”)
Solution :
<?php
class FormeGeometrique {
private $xOrigine;
private $yOrigine;
private $type;
function __construct() {
echo "Appel du constructeur" . PHP_EOL;
$this->xOrigine = 0;
$this->yOrigine = 0;
$this->type = "Carré";
}
function __get($attribut) { // Lire la valeur attribut
echo "Appel de __get(" . $attribut . ")" . PHP_EOL;
switch($attribut) {
case 'xOrigine' :
return $this->xOrigine;
break;
case 'yOrigine' :
return $this->yOrigine;
break;
case 'type' :
return $this->type;
break;
default :
throw new Exception('Attribut inconnu !');
break;
}
}
function __set($attribut, $valeur) {
echo "Appel de __set(" . $attribut . ", " . $valeur . ")" . PHP_EOL;
switch($attribut) {
case 'xOrigine' :
case 'yOrigine' :
if ( ctype_digit($valeur) || is_numeric($valeur) ) { // 123
$this->$attribut = (int) $valeur;
} else {
throw new Exception("valeur non valide pour l'attribut \$" . $attribut . " !");
// On utilise le concept de "variable variable" ($$attribut) pour afficher le nom
// du paramètre invalide (xOrigine ou, yOrigine)
}
break;
case 'type' :
if ( in_array($valeur, ["Carré", "Cercle", "Triangle", "Rectangle"]) ) {
$this->$attribut = $valeur;
} else {
throw new Exception("valeur non valide pour l'attributt \$" . $attribut . " !");
}
break;
default :
throw new Exception('Attribut inconnu !');
break;
}
}
}
$maFormeGeometrique = new FormeGeometrique();
// On affiche les valeurs des attributs en appelant la méthode __get()
echo "La forme géometrique est actuellement un " . $maFormeGeometrique->type . " dont l'origine est (" . $maFormeGeometrique->xOrigine . ", " . $maFormeGeometrique->yOrigine .")" . PHP_EOL;
$maFormeGeometrique->type = "Triangle"; // appel de $maFormeGeometrique->__set("type", "Triangle")
$maFormeGeometrique->xOrigine = "50"; // appel de $maFormeGeometrique->__set("xOrigine", "50")
$maFormeGeometrique->yOrigine = 75; // appel de $maFormeGeometrique->__set("yOrigine", 75)
echo "La forme géometrique est désormais un " . $maFormeGeometrique->type . " dont l'origine est (" . $maFormeGeometrique->xOrigine . ", " . $maFormeGeometrique->yOrigine .")";
?>
💻 Travail n° 3 : Programmation objet 2/2
Vous allez devoir ici mettre en place un héritage depuis une classe abstraite.
Vous pourrez trouver des informations sur l’héritage en PHP — notamment appliqué aux classes abastraites — dans la rubrique “Les classes abstraites et finales” du site Apprendre à PHProgrammer |
🎯 Travail à faire :
-
Modifier la classe
FormeGeometrique
pour la rendre abstraite et rendre ses attributsprotected
plutôt queprivate
. -
Tenter d’instancier cette classe. Qu’indique PHP ? Expliquer.
-
Ajouter à cette classe une méthode
abstract
nomméecalculerPerimetre()
qui permet de calculer le périmètre de la forme géométrique. -
Créer une classe
Cercle
qui hérite deFormeGeometrique
et dont le constructeur prend en paramètre la longueur de son rayon. -
Implémenter le code de
calculerPerimetre()
pour la classeCercle
puis tester son bon fonctionnement (→ instanciation d’un objet de typeCercle
puis appel de sa méthodecalculerPerimetre
)
Solution :
<?php
abstract class FormeGeometrique {
protected $xOrigine;
protected $yOrigine;
protected $type;
function __construct() {
$this->xOrigine = 0;
$this->yOrigine = 0;
$this->type = "Carré";
}
function __get($attribut) {
switch($attribut) {
case 'xOrigine' :
return $this->xOrigine;
break;
case 'yOrigine' :
return $this->yOrigine;
break;
case 'type' :
return $this->type;
break;
default :
throw new Exception('Attribut inconnu !');
break;
}
}
function __set($attribut, $valeur) {
switch($attribut) {
case 'xOrigine' :
case 'yOrigine' :
if ( ctype_digit($valeur) || is_numeric($valeur) ) {
$this->$attribut = (int) $valeur;
} else {
throw new Exception("valeur non valide pour l'attribut \$" . $attribut . " !");
// On utilise le concept de "variable variable" ($$attribut) pour afficher le nom
// du paramètre invalide (xOrigine ou, yOrigine)
}
break;
case 'type' :
if ( in_array($valeur, ["Carré", "Cercle", "Triangle", "Rectangle"]) ) {
$this->$attribut = $valeur;
} else {
throw new Exception("valeur non valide pour l'attributt \$" . $attribut . " !");
}
break;
default :
throw new Exception('Attribut inconnu !');
break;
}
}
abstract function calculerPerimetre() : float;
}
class Cercle extends FormeGeometrique {
function __construct($rayon) {
parent::__construct();
$this->rayon = $rayon;
parent::__set('type', "Cercle");
}
final function calculerPerimetre() : float {
return 2 * M_PI * $this->rayon;
}
function __get($attribut) {
switch($attribut) {
case 'rayon' :
return $this->xOrigine;
break;
default :
//throw new Exception('Attribut inconnu !');
return parent::__get($attribut);
break;
}
}
function __set($attribut, $valeur) {
switch($attribut) {
case 'rayon' :
if ( ctype_digit($valeur) || is_numeric($valeur) ) {
$this->$attribut = (int) $valeur;
} else {
throw new Exception("valeur non valide pour l'attribut \$" . $attribut . " !");
}
break;
default :
//throw new Exception('Attribut inconnu !');
parent::__set($attribut, $valeur);
break;
}
}
}
$monCercle = new Cercle(20);
$monCercle->xOrigine = "10"; // Le setter accepte les nombres sous leur format numérique ou leur représentation textuelle
$monCercle->yOrigine = 50;
echo <<<HEREDOC
La forme géométrique est un {$monCercle->type} de rayon {$monCercle->rayon} dont l'origine est en ({$monCercle->xOrigine}, {$monCercle->yOrigine}).
Sa circonférence est {$monCercle->calculerPerimetre()}
HEREDOC
?>
Conclusion
Vous avez découvert rapidement dans cette activité la syntaxe de base du langage PHP pour mettre en œuvre les concepts de base de la programmation informatique :
-
variables (simples, tableaux, tableaux associatifs)
-
structures de contrôle itératives et conditionnelles
-
fonctions
-
programmation objet (constructeur, attributs, méthodes…)
Bien d’autres choses sont à apprendre pour maitriser le langage mais vous avez pu vous rendre compte qu’il n’était pas si difficile de passer d’un langage comme le C/C++ ou Python au PHP lorsqu’on a assimilé les bases de la programmation informatique.
🞄 🞄 🞄