Le sommaire

Exercice 8 sur 9 du chapitre 2 · 150 XP · 4 objectifs vérifiés par des tests

Notions abordées : Fonction fléchéefnarray_filter()count()instanceof

Madame Lou trouve la une un peu longue à parcourir avant sa tournée. Elle veut une ligne tout en haut, qui résume le numéro : « Dans ce numéro : 4 articles et 1 petite annonce. » Et pas question de la recompter à la main à chaque numéro : PHP sait filtrer et compter un tableau.

Votre mission

La classe Sommaire est déjà déclarée : elle reçoit les publications, et sa méthode versHtml() renvoie pour l'instant une chaîne vide.

  1. Dans versHtml(), gardez les articles seuls avec array_filter() et une fonction fléchée qui teste instanceof Article. Faites de même pour les annonces, avec instanceof Annonce.
  2. Renvoyez <p class="sommaire">Dans ce numéro : 4 articles et 1 petite annonce.</p>, en comptant avec count(). Le pluriel commence à 2 : « 0 petite annonce », « 1 article », mais « 2 petites annonces ».
  3. Dans <main class="articles">, affichez le sommaire avant les publications : (new Sommaire($publications))->versHtml().

Rappel

Une fonction fléchée est une fonction anonyme d'une seule expression, écrite avec fn : fn (int $n): int => $n * 2 renvoie le double de ce qu'elle reçoit, sans return ni accolades.

On la passe à array_filter($tableau, fn ($x) => …), qui l'appelle sur chaque élément et garde ceux pour lesquels elle renvoie true. count($tableau) compte les éléments.

Pour le singulier ou le pluriel, l'opérateur ternaire (exercice 4) fait l'affaire : $nombre > 1 ? ' articles' : ' article'.