Fonctionnalité de recherche
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 85 sur 91.
Défi
FacileAmé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 classeBookavec des propriétés en lecture seule (isbn,title,author), une propriété privée$isAvailableinitialisée àtrue, et les méthodes :isAvailable(),markAsBorrowed(), etmarkAsReturned().User.php— Incluez le fichier Book. Votre classeUseravec des propriétés en lecture seule (id,name), un tableau privé$borrowedBooks, une constanteMAX_BOOKSde3, et les méthodes :getBorrowedBooks(),canBorrow(),addBook(Book $book), etremoveBook(string $isbn).Library.php— Incluez le fichier User. Étendez votre classeLibraryavec 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_filteravec des fonctions fléchées etstripospour une correspondance insensible à la casse. Rappelez-vous questriposretournefalselorsqu'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
Libraryet 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 unUseravec l'ID1et le nom"TestUser".Ensuite, effectuez ces recherches et affichez les résultats :
- Recherchez par titre en utilisant la première entrée, affichez le titre de chaque livre correspondant sur une nouvelle ligne
- Recherchez par auteur en utilisant la deuxième entrée, affichez le nombre de livres correspondants
- Récupérez les livres disponibles et affichez le nombre
Format de sortie :
Title matches: [title1] [title2] ... Author matches: [count] Available: [count]- ISBN :
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
1Les bases de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition de méthodeLe mot-clé finalClasses abstraitesRécapitulatif - Hiérarchie des employés7Encapsulation
Public, Protégé, PrivéModificateurs d'accès en détailGetters et SettersMasquage d'informationPromotion de constructeur (8.0)Récapitulatif - Système de gestion d'étudiants10Concepts avancés de la POO
Composition vs HéritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibers (PHP 8.1)Clonage d'objets : analyse approfondieGénérateurs et Itérateurs13Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository2Espaces de noms et Autoloading
Introduction aux espaces de nomsLe mot-clé useStandard d'Autoloading PSR-4L'Autoloader ComposerRécapitulatif - Projet organisé5Interfaces et Contrats
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesInterface vs Classe AbstraiteType Hinting avec les InterfacesRécapitulatif - Calculateur de Formes8Méthodes magiques
Introduction aux méthodes magiques__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Clonage d'objets__serialize & __unserializeRécapitulatif - Collection personnalisée11Système de types et gestion des erreurs
Déclarations de typesTypes nullablesTypes d'union et d'intersectionClasses d'exceptionHiérarchie d'exceptions personnaliséesTry, Catch, FinallyRécapitulatif - Validateur de formulaire14Projet : Gestion de bibliothèque
Présentation du projetClasses Livre et Utilisateur3Propriétés de classe
Propriétés d'instance vs Propriétés statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés readonly (PHP 8.1)Récapitulatif - Gestionnaire de compte bancaire6Polymorphisme
Retour sur la redéfinition de méthodePolymorphisme via les interfacesType Hinting et Types d'unionLiaison statique tardiveRécapitulatif - Processeur de paiement9Traits
Introduction aux TraitsUtilisation de plusieurs TraitsRésolution des conflits de TraitsMéthodes abstraites dans les TraitsTraits vs Héritage12Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie