La recette de la maison
Le chef écrit une fois la recette du msemen ; chaque commis l'applique avec ses ingrédients (les paramètres) et rend une assiette (la valeur de retour).
Déclarer une fonction, ses paramètres (typés, par défaut), sa valeur de retour, la portée des variables, puis réutiliser l'en-tête et le pied de page sur toutes les pages avec require.
Le prix TTC se calcule sur la page d'accueil, le catalogue, le panier et la facture. Le menu du site doit apparaître sur toutes les pages. Plutôt que de copier ces morceaux partout, on les écrit une seule fois : dans une fonction pour le calcul, dans un fichier inclus pour le HTML commun.
La fonction prixTTC est définie une fois : elle attend un prix hors taxe et un taux de TVA, 0.2 par défaut.
function prixTtc(float $ht, float $tva = 0.20): float
{
$ttc = $ht * (1 + $tva);
return round($ttc, 2);
}
echo prixTtc(100); // 120
echo prixTtc(100, 0.10); // 110
$total = prixTtc(30) * 3; // le résultat s'utilise comme une valeur
float $ht : le paramètre est typé ; PHP vérifie ce qu’on lui passe.$tva = 0.20 : valeur par défaut, utilisée si l’argument est omis (les paramètres par défaut se placent à la fin).: float après la parenthèse : le type de retour. void signifie « ne renvoie rien ».return renvoie la valeur et quitte la fonction immédiatement.$tva = 0.20;
function ttc(float $ht): float
{
return $ht * (1 + $tva); // Warning: Undefined variable $tva
}
Solutions propres : passer la valeur en paramètre, ou utiliser une constante (const TVA = 0.20;), visible partout.
PHP fournit des milliers de fonctions natives : strlen, date, count, round, rand, max… La documentation officielle (php.net, en français) donne pour chacune ses paramètres et un exemple : prenez l’habitude d’y chercher avant d’écrire votre propre fonction.
Organisation habituelle d’un petit site :
souk/
├── index.php
├── catalogue.php
└── inc/
├── fonctions.php ← prixTtc(), badgeStock()...
├── entete.php ← <!DOCTYPE html>, <head>, menu
└── pied.php ← footer, </body></html>
<?php
require_once __DIR__ . '/inc/fonctions.php';
$titre = "Catalogue"; // variable utilisée par entete.php
require __DIR__ . '/inc/entete.php';
?>
<p>Contenu propre à cette page</p>
<?php require __DIR__ . '/inc/pied.php'; ?>
Le fichier inclus voit les variables de l’endroit où il est inclus : c’est pour cela que entete.php peut afficher $titre.
Le chef écrit une fois la recette du msemen ; chaque commis l'applique avec ses ingrédients (les paramètres) et rend une assiette (la valeur de retour).
Toutes les boutiques d'une chaîne ont la même enseigne. On ne la repeint pas à la main pour chaque magasin : on fabrique un modèle. require 'entete.php' pose la même enseigne sur chaque page.
La page s'affichera ici.
Le navigateur demandera /index.php au serveur, qui exécutera le PHP et renverra du HTML.
Consignes 0 / 3
Écrivez une fonction fraisLivraison(string $ville, float $montant): int qui renvoie 0 si le montant atteint 500 DH, 20 pour Casablanca, 35 sinon.
<?php function fraisLivraison(string $ville, float $montant): int { if ($montant >= 500) { return 0; } return $ville === "Casablanca" ? 20 : 35; } echo fraisLivraison("Fès", 320); // 35
Ce code affiche-t-il 35 ? $frais = 35; function total($m) { return $m + $frais; } echo total(100); Corrigez-le.
<?php // Non : dans la fonction, $frais n'existe pas (portée locale). // PHP avertit « Undefined variable $frais » et calcule 100 + null = 100. // Correction : passer la valeur en paramètre. function total(float $m, float $frais): float { return $m + $frais; } $frais = 35; echo total(100, $frais); // 135
Créez pied.php qui affiche « © Souk Atlas » suivi de l'année en cours, et incluez-le en bas de index.php.
<?php // pied.php ?> <footer>© Souk Atlas <?= date('Y') ?></footer> <?php // à la fin de index.php require __DIR__ . '/pied.php';