Créer des fonctions de traitement
Objectif : Écrire une fonction qui transforme les données d’un contact et retourne un résultat sans afficher de HTML.
Vous avez déjà une liste de contacts affichée dans index.php. Dès que plusieurs pages doivent appliquer le même traitement à ces données, copier le code crée des duplications et rend les changements plus difficiles. Vous allez placer ce traitement dans une fonction qui reçoit un contact et retourne un résumé textuel, sans produire de HTML.
Dans les leçons précédentes, vous avez appris à représenter les contacts dans des tableaux associatifs et à charger des fichiers partagés avec require et __DIR__. Vous allez conserver ces choix et ajouter le fichier includes/fonctions.php, prévu par le contrat du projet, pour y définir un traitement réutilisable.
Définir une fonction de traitement
Une fonction regroupe une opération sous un nom que vous pouvez appeler à plusieurs endroits. Ici, creerResumeContact reçoit un tableau associatif et retourne une chaîne contenant le nom et l’adresse e-mail. Le paramètre array $contact indique le type attendu, et : string indique le type de la valeur retournée.
<?php
declare(strict_types=1);
function creerResumeContact(array $contact): string
{
return $contact['nom'] . ' — ' . $contact['courriel'];
}L’instruction return renvoie le résultat à l’appelant : elle ne l’affiche pas dans la page. La fonction a une responsabilité précise, construire un résumé à partir des deux champs attendus. Elle ne décide ni de la structure HTML ni de la manière d’afficher le résultat.
Charger la fonction et l’utiliser
Ajoutez la fonction dans includes/fonctions.php, puis chargez ce fichier dans index.php. Le fichier de la fonction doit être chargé avant son premier appel. Le code ci-dessous montre l’état complet de ces deux fichiers pour cette leçon ; conservez vos fichiers existants includes/entete.php et includes/pied.php.
<?php
declare(strict_types=1);
function creerResumeContact(array $contact): string
{
return $contact['nom'] . ' — ' . $contact['courriel'];
}Dans index.php, les deux contacts de démonstration restent des tableaux associatifs. Pour chaque contact, l’appel à la fonction produit une chaîne, ensuite échappée au moment de l’affichage avec htmlspecialchars, comme dans la leçon consacrée à la sortie HTML.
<?php
declare(strict_types=1);
require __DIR__ . '/includes/fonctions.php';
$contacts = [
[
'nom' => 'Ada Lovelace',
'courriel' => '[email protected]',
'telephone' => '01 23 45 67 89',
],
[
'nom' => 'Alan Turing',
'courriel' => '[email protected]',
'telephone' => '09 87 65 43 21',
],
];
$nombreContacts = count($contacts);
$etatCarnet = $nombreContacts > 0 ? 'Le carnet contient des contacts.' : 'Le carnet est vide.';
$versionPhp = PHP_VERSION;
require __DIR__ . '/includes/entete.php';
?>
<main class="carnet-principal">
<h2>État du carnet</h2>
<p><?= htmlspecialchars($etatCarnet, ENT_QUOTES, 'UTF-8') ?></p>
<p>Nombre de contacts : <?= $nombreContacts ?></p>
<p>Version de PHP : <?= htmlspecialchars($versionPhp, ENT_QUOTES, 'UTF-8') ?></p>
<section aria-labelledby="titre-contacts">
<h2 id="titre-contacts">Liste des contacts</h2>
<?php if ($contacts === []): ?>
<p>Aucun contact à afficher.</p>
<?php else: ?>
<ul class="carnet-liste">
<?php foreach ($contacts as $contact): ?>
<li class="carnet-contact">
<h3><?= htmlspecialchars($contact['nom'], ENT_QUOTES, 'UTF-8') ?></h3>
<p><?= htmlspecialchars(creerResumeContact($contact), ENT_QUOTES, 'UTF-8') ?></p>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</section>
</main>
<?php require __DIR__ . '/includes/pied.php'; ?>Deux contacts sont affichés. Le résumé d’Ada Lovelace est « Ada Lovelace — [email protected] » et celui d’Alan Turing est « Alan Turing — [email protected] ».La page appelle la même fonction pour chaque personne, tandis que le HTML reste dans le fichier de page. Si vous modifiez la règle de construction du résumé, vous la modifiez une seule fois dans includes/fonctions.php. Pour ce premier exemple, les contacts fournissent bien les clés nom et courriel attendues par la fonction.
À retenir
- Une fonction se définit une fois et s’appelle là où son traitement est nécessaire.
- Un paramètre typé précise les données attendues ; le type de retour précise le résultat fourni.
- Utilisez return pour renvoyer une valeur, sans afficher de HTML depuis la fonction.
- Placez les traitements réutilisables dans includes/fonctions.php et chargez ce fichier avant l’appel.
Dans la prochaine leçon, vous apprendrez à séparer plus explicitement le traitement des données et leur rendu dans les gabarits.