Aller au contenu
M07 · B. Programmer en PHP

Écrire ses fonctions et découper le site avec include et require

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.

1Situer

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.

2Comprendre

Appeler une fonction : arguments, calcul, return
function prixTTC($ht, $taux = 0.2) { return $ht * (1 + $taux) } pendant l'appel $ht = 150 $taux = 0.2 → 180.0 pendant l'appel $ht = 100 $taux = 0.1 → 110.0 $ttc = prixTTC(150) $ttc = 180.0 $ttc2 = prixTTC(100, 0.1) $ttc2 = 110.0

La fonction prixTTC est définie une fois : elle attend un prix hors taxe et un taux de TVA, 0.2 par défaut.

1 / 5

Déclarer et appeler une fonction

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.

La portée des variables

$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.

Des fonctions prêtes à l’emploi

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.

include et require : réutiliser des fichiers

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.

Exemple simple

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).

Exemple simple

Le même bandeau sur toutes les vitrines

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.

3Manipuler

Le site a un en-tête commun (entete.php) et des fonctions (fonctions.php). Complétez fonctions.php puis utilisez-les dans index.php.
Pas à pas dans le lab ↗ Cliquez sur Exécuter : PHP 8.3 démarre dans votre navigateur (environ 5 Mo à télécharger, une seule fois).

La page s'affichera ici.

Le navigateur demandera /index.php au serveur, qui exécutera le PHP et renverra du HTML.

Entre le navigateur et le serveur aucun échange pour l'instant

Consignes 0 / 3

  1. La page affiche le prix TTC de l'huile d'argan : 144 DH
  2. « Remise : 108 DH » avec la remise par défaut de 10 %
  3. « Remise : 96 DH » avec une remise de 20 %

4Pratiquer

Exercice 1 · Frais de livraison

Écrivez une fonction fraisLivraison(string $ville, float $montant): int qui renvoie 0 si le montant atteint 500 DH, 20 pour Casablanca, 35 sinon.

Voir le corrigé
<?php
function fraisLivraison(string $ville, float $montant): int
{
    if ($montant >= 500) {
        return 0;
    }
    return $ville === "Casablanca" ? 20 : 35;
}
echo fraisLivraison("Fès", 320);   // 35

Exercice 2 · Portée des variables

Ce code affiche-t-il 35 ? $frais = 35; function total($m) { return $m + $frais; } echo total(100); Corrigez-le.

Voir le corrigé
<?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

Exercice 3 · Un pied de page commun

Créez pied.php qui affiche « © Souk Atlas » suivi de l'année en cours, et incluez-le en bas de index.php.

Voir le corrigé
<?php // pied.php ?>
<footer>© Souk Atlas <?= date('Y') ?></footer>

<?php // à la fin de index.php
require __DIR__ . '/pied.php';

5Vérifier

1. Que se passe-t-il si un fichier inclus avec require est introuvable ?
2. À quoi sert require_once ?
3. Une variable créée dans une fonction est-elle visible après l'appel ?