Suchfunktionalität
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 85 von 91.
Aufgabe
EinfachLassen Sie uns unser Bibliotheksverwaltungssystem erweitern, indem wir eine Suchfunktion hinzufügen. Benutzer müssen Bücher leicht finden können, egal ob sie nach einem bestimmten Titel suchen, nach Autoren stöbern oder prüfen, was derzeit zum Ausleihen verfügbar ist.
Sie werden Ihren Code über vier Dateien organisieren:
Book.php— IhreBook-Klasse mit Readonly-Eigenschaften (isbn,title,author), einer privaten$isAvailable-Eigenschaft, die alstruebeginnt, und den Methoden:isAvailable(),markAsBorrowed()undmarkAsReturned().User.php— Binden Sie die Book-Datei ein. IhreUser-Klasse mit Readonly-Eigenschaften (id,name), einem privaten$borrowedBooks-Array, einerMAX_BOOKS-Konstante von3und den Methoden:getBorrowedBooks(),canBorrow(),addBook(Book $book)undremoveBook(string $isbn).Library.php— Binden Sie die User-Datei ein. Erweitern Sie IhreLibrary-Klasse um die bestehende Funktionalität plus drei neue Suchmethoden:searchByTitle(string $keyword): array— gibt alle Bücher zurück, bei denen der Titel das Schlüsselwort enthält (Groß-/Kleinschreibung ignorieren)searchByAuthor(string $author): array— gibt alle Bücher zurück, bei denen der Autorenname den Suchbegriff enthält (Groß-/Kleinschreibung ignorieren)getAvailableBooks(): array— gibt nur Bücher zurück, die derzeit zum Ausleihen verfügbar sind
Verwenden Sie
array_filtermit Arrow-Functions undstriposfür den case-insensitiven Abgleich. Denken Sie daran, dassstriposden Wertfalsezurückgibt, wenn keine Übereinstimmung gefunden wird, prüfen Sie also auf!== false.main.php— Binden Sie die Library-Datei ein. Sie erhalten zwei Eingaben: ein Suchschlüsselwort und einen Autorennamen.Erstellen Sie eine
Libraryund fügen Sie diese vier Bücher hinzu:- ISBN:
"978-0", Titel:"PHP Basics", Autor:"John Smith" - ISBN:
"978-1", Titel:"Advanced PHP", Autor:"Jane Doe" - ISBN:
"978-2", Titel:"Python Guide", Autor:"John Smith" - ISBN:
"978-3", Titel:"Web Development", Autor:"Alice Brown"
Leihen Sie das Buch mit der ISBN
"978-1"unter Verwendung einesUsermit der ID1und dem Namen"TestUser"aus.Führen Sie dann diese Suchvorgänge durch und geben Sie die Ergebnisse aus:
- Suchen Sie nach dem Titel unter Verwendung der ersten Eingabe und geben Sie den Titel jedes passenden Buches in einer neuen Zeile aus
- Suchen Sie nach dem Autor unter Verwendung der zweiten Eingabe und geben Sie die Anzahl der passenden Bücher aus
- Rufen Sie die verfügbaren Bücher ab und geben Sie die Anzahl aus
Ausgabeformat:
Title matches: [title1] [title2] ... Author matches: [count] Available: [count]- ISBN:
Diese Herausforderung zeigt, wie array_filter in Kombination mit stripos eine leistungsstarke, benutzerfreundliche Suchfunktion erstellt. Der case-insensitive Abgleich bedeutet, dass sich Benutzer bei der Suche keine Gedanken über die exakte Groß- und Kleinschreibung machen müssen.
Probier es selbst
<?php
require_once 'Library.php';
// Eingaben lesen
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));
// TODO: Eine Library-Instanz erstellen
// TODO: Die vier Bücher zur Bibliothek hinzufügen:
// ISBN: "978-0", Titel: "PHP Basics", Autor: "John Smith"
// ISBN: "978-1", Titel: "Advanced PHP", Autor: "Jane Doe"
// ISBN: "978-2", Titel: "Python Guide", Autor: "John Smith"
// ISBN: "978-3", Titel: "Web Development", Autor: "Alice Brown"
// TODO: Einen Benutzer mit der ID 1 und dem Namen "TestUser" erstellen und registrieren
// TODO: Das Buch mit der ISBN "978-1" ausleihen
// TODO: Nach Titel suchen unter Verwendung von $searchKeyword und Ergebnisse ausgeben
echo "Title matches:\n";
// Jeden Titel des passenden Buches in einer neuen Zeile ausgeben
// TODO: Nach Autor suchen unter Verwendung von $authorName und die Anzahl ausgeben
echo "Author matches: " . /* Anzahl hier */ "\n";
// TODO: Verfügbare Bücher abrufen und die Anzahl ausgeben
echo "Available: " . /* Anzahl hier */ "\n";
?>Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas $this-SchlüsselwortMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick - Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDas parent:: SchlüsselwortMethoden überschreibenDas final SchlüsselwortAbstrakte KlassenZusammenfassung – Mitarbeiter-Hierarchie7Kapselung
Public, Protected, PrivateZugriffsmodifikatoren im DetailGetter und SetterInformation HidingConstructor Promotion (8.0)Zusammenfassung – Studentenverwaltungssystem2Namensräume & Autoloading
Einführung in NamensräumeDas use-SchlüsselwortPSR-4 Autoloading-StandardComposer AutoloaderZusammenfassung – Organisiertes Projekt5Interfaces & Verträge
Einführung in InterfacesInterfaces implementierenMehrfache Interface-ImplementierungInterface vs. Abstrakte KlasseType Hinting mit InterfacesZusammenfassung – Formen-Rechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objekt-Klonen__serialize & __unserializeZusammenfassung - Eigene Collection11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenEigene Exception-HierarchieTry, Catch, FinallyZusammenfassung - Formular-Validator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klasseneigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenReadonly-Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphismus
Method Overriding erneut betrachtetPolymorphismus über InterfacesType Hinting & Union TypesLate Static BindingZusammenfassung – Payment Processor9Traits
Einführung in TraitsVerwendung mehrerer TraitsKonfliktlösung bei TraitsAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung