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.
- Dans
versHtml(), gardez les articles seuls avecarray_filter()et une fonction fléchée qui testeinstanceof Article. Faites de même pour les annonces, avecinstanceof Annonce. - Renvoyez
<p class="sommaire">Dans ce numéro : 4 articles et 1 petite annonce.</p>, en comptant aveccount(). Le pluriel commence à 2 : « 0 petite annonce », « 1 article », mais « 2 petites annonces ». - 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'.