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 des livres facilement, qu'ils recherchent un titre spécifique, parcourent par auteur ou vérifient ce qui est actuellement disponible à l'emprunt.

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, et 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 de 3, et 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 plus trois nouvelles méthodes de recherche :
    • searchByTitle(string $keyword): array — retourne tous les livres dont le titre contient le mot-clé (insensible à la casse)
    • searchByAuthor(string $author): array — retourne tous les livres dont le nom de l'auteur contient le terme de recherche (insensible à la casse)
    • getAvailableBooks(): array — retourne uniquement les livres qui sont actuellement disponibles pour l'emprunt

    Utilisez array_filter avec des fonctions fléchées et stripos pour une correspondance insensible à la casse. Rappelez-vous que stripos retourne false lorsqu'aucune correspondance n'est trouvée, vérifiez donc avec !== 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 avec l'ISBN "978-1" en utilisant un User avec l'ID 1 et le nom "TestUser".

    Ensuite, effectuez ces recherches et affichez les résultats :

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

    Format de sortie :

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

Ce défi démontre comment array_filter combiné à stripos crée une fonctionnalité de recherche puissante et conviviale. La correspondance insensible à la casse signifie que les utilisateurs n'ont pas à se soucier de la capitalisation exacte lors de la 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", Titre: "Web Development", Auteur: "Alice Brown"

// TODO: Créer un utilisateur avec l'ID 1 et le nom "TestUser", puis 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 de résultats
echo "Author matches: " . /* nombre ici */ "\n";

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

?>

Toutes les leçons de Programmation Orientée Objet