Menu
Coddy logo textTech

Fonctionnalité de recherche

Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy. Leçon 85 sur 91.

challenge icon

Défi

Facile

Améliorons notre système de gestion de bibliothèque en ajoutant une fonctionnalité de recherche. Les utilisateurs doivent pouvoir trouver facilement des livres, qu'ils recherchent un titre précis, parcourent les livres par auteur ou vérifient lesquels sont actuellement disponibles à emprunter.

Vous organiserez votre code sur quatre fichiers :

  • Book.php : votre classe Book avec des propriétés en lecture seule (isbn, title, author), une propriété privée $isAvailable initialisée à true, ainsi que les méthodes : isAvailable(), markAsBorrowed() et markAsReturned().
  • User.php : incluez le fichier Book. Votre classe User avec des propriétés en lecture seule (id, name), un tableau privé $borrowedBooks, une constante MAX_BOOKS ayant pour valeur 3, ainsi que les méthodes : getBorrowedBooks(), canBorrow(), addBook(Book $book) et removeBook(string $isbn).
  • Library.php : incluez le fichier User. Étendez votre classe Library avec les fonctionnalités existantes ainsi que trois nouvelles méthodes de recherche :
    • searchByTitle(string $keyword): array : renvoie tous les livres dont le titre contient le mot-clé (sans tenir compte de la casse)
    • searchByAuthor(string $author): array : renvoie tous les livres dont le nom de l'auteur contient le terme recherché (sans tenir compte de la casse)
    • getAvailableBooks(): array : renvoie uniquement les livres actuellement disponibles à l'emprunt

    Utilisez array_filter avec des fonctions fléchées et stripos pour effectuer une recherche sans tenir compte de la casse. N'oubliez pas que stripos renvoie false lorsqu'aucune correspondance n'est trouvée : vérifiez donc que la valeur est !== false.

  • main.php : incluez le fichier Library. Vous recevrez deux entrées : un mot-clé de recherche et un nom d'auteur.

    Créez une Library et ajoutez ces quatre livres :

    • ISBN : "978-0", titre : "PHP Basics", auteur : "John Smith"
    • ISBN : "978-1", titre : "Advanced PHP", auteur : "Jane Doe"
    • ISBN : "978-2", titre : "Python Guide", auteur : "John Smith"
    • ISBN : "978-3", titre : "Web Development", auteur : "Alice Brown"

    Empruntez le livre dont l'ISBN est "978-1" en utilisant un User avec l'identifiant 1 et le nom "TestUser".

    Effectuez ensuite ces recherches et affichez les résultats :

    1. Effectuez une recherche par titre avec la première entrée et affichez le titre de chaque livre correspondant sur une nouvelle ligne
    2. Effectuez une recherche par auteur avec la deuxième entrée et affichez le nombre de livres correspondants
    3. Récupérez les livres disponibles et affichez leur nombre

    Format de sortie :

    Title matches:
    [title1]
    [title2]
    ...
    Author matches: [count]
    Available: [count]

Ce défi montre comment array_filter combiné à stripos permet de créer une fonctionnalité de recherche puissante et conviviale. La recherche sans tenir compte de la casse signifie que les utilisateurs n'ont pas besoin de se soucier de la capitalisation exacte lorsqu'ils effectuent une recherche.

Essayez vous-même

<?php

require_once 'Library.php';

// Lire les entrées
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));

// TODO: Créer une instance de Library

// TODO: Ajouter les quatre livres à la bibliothèque :
// ISBN: "978-0", Titre: "PHP Basics", Auteur: "John Smith"
// ISBN: "978-1", Titre: "Advanced PHP", Auteur: "Jane Doe"
// ISBN: "978-2", Titre: "Python Guide", Auteur: "John Smith"
// ISBN: "978-3", Title: "Web Development", Author: "Alice Brown"

// TODO: Créer un User avec l'ID 1 et le nom "TestUser", l'enregistrer

// TODO: Emprunter le livre avec l'ISBN "978-1"

// TODO: Rechercher par titre en utilisant $searchKeyword et afficher les résultats
echo "Title matches:\n";
// Afficher le titre de chaque livre correspondant sur une nouvelle ligne

// TODO: Rechercher par auteur en utilisant $authorName et afficher le nombre
echo "Author matches: " . /* compte ici */ "\n";

// TODO: Obtenir les livres disponibles et afficher le nombre
echo "Available: " . /* compte ici */ "\n";

?>

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur PHP en ligne