Suchfunktion
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 85 von 91.
Aufgabe
EinfachErweitern wir unser Bibliotheksverwaltungssystem um eine Suchfunktion. Benutzer müssen Bücher leicht finden können, egal, ob sie nach einem bestimmten Titel suchen, nach Autor stöbern oder prüfen, welche Bücher derzeit ausgeliehen werden können.
Du organisierst deinen Code auf vier Dateien:
Book.php: Deine KlasseBookmit schreibgeschützten Eigenschaften (isbn,title,author), einer privaten Eigenschaft$isAvailable, die mittruebeginnt, und den Methoden:isAvailable(),markAsBorrowed()undmarkAsReturned().User.php: Binde die Book-Datei ein. Deine KlasseUsermit schreibgeschützten Eigenschaften (id,name), einem privaten Array$borrowedBooks, einer KonstanteMAX_BOOKSmit dem Wert3und den Methoden:getBorrowedBooks(),canBorrow(),addBook(Book $book)undremoveBook(string $isbn).Library.php: Binde die User-Datei ein. Erweitere deine KlasseLibraryum die bestehende Funktionalität sowie drei neue Suchmethoden:searchByTitle(string $keyword): array: gibt alle Bücher zurück, deren Titel das Schlüsselwort enthält (ohne Beachtung der Groß- und Kleinschreibung)searchByAuthor(string $author): array: gibt alle Bücher zurück, deren Autorenname den Suchbegriff enthält (ohne Beachtung der Groß- und Kleinschreibung)getAvailableBooks(): array: gibt nur Bücher zurück, die derzeit zum Ausleihen verfügbar sind
Verwende
array_filtermit Pfeilfunktionen undstriposfür die Suche ohne Beachtung der Groß- und Kleinschreibung. Denke daran, dassstriposfalsezurückgibt, wenn keine Übereinstimmung gefunden wurde. Prüfe daher auf!== false.main.php: Binde die Library-Datei ein. Du erhältst zwei Eingaben: ein Suchschlüsselwort und einen Autorennamen.Erstelle eine
Libraryund füge 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"
Leihe das Buch mit der ISBN
"978-1"mithilfe einesUsermit der ID1und dem Namen"TestUser"aus.Führe anschließend diese Suchen durch und gib die Ergebnisse aus:
- Suche anhand des ersten Eingabewerts nach dem Titel und gib den Titel jedes passenden Buches in einer neuen Zeile aus
- Suche anhand des zweiten Eingabewerts nach dem Autor und gib die Anzahl der passenden Bücher aus
- Rufe die verfügbaren Bücher ab und gib die Anzahl aus
Ausgabeformat:
Title matches: [title1] [title2] ... Author matches: [count] Available: [count]- ISBN:
Diese Aufgabe zeigt, wie array_filter in Kombination mit stripos eine leistungsfähige und benutzerfreundliche Suchfunktionalität ermöglicht. Dank der Suche ohne Beachtung der Groß- und Kleinschreibung müssen sich Benutzer bei der Suche keine Gedanken über die exakte Großschreibung machen.
Probier es selbst
<?php
require_once 'Library.php';
// Eingaben lesen
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));
// TODO: Erstelle eine Library-Instanz
// TODO: Füge die vier Bücher zur Bibliothek 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", Title: "Web Development", Author: "Alice Brown"
// TODO: Erstelle einen User mit ID 1 und Namen "TestUser", registriere ihn
// TODO: Leihe das Buch mit ISBN "978-1" aus
// TODO: Suche nach Titel mit $searchKeyword und gib die Ergebnisse aus
echo "Title matches:\n";
// Gib den Titel jedes übereinstimmenden Buchs in einer neuen Zeile aus
// TODO: Suche nach Autor mit $authorName und gib die Anzahl aus
echo "Author matches: " . /* Anzahl hier */ "\n";
// TODO: Verfügbare Bücher holen und die Anzahl ausgeben
echo "Available: " . /* Anzahl hier */ "\n";
?>Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in OOPKlassen vs. ObjekteDas Schlüsselwort $thisMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick – Einfacher Taschenrechner4Vererbung
Grundlegende VererbungDas Schlüsselwort parent::MethodenüberschreibungDas Schlüsselwort finalAbstrakte KlassenRückblick – Mitarbeiterhierarchie7Kapselung
Öffentlich, geschützt, privatZugriffsmodifikatoren im DetailGetter und SetterInformationsverbergungKonstruktor-Promotion (8.0)Wiederholung – System zur Verwaltung von Schülerdatensätzen2Namespaces & Autoloading
Einführung in NamespacesDas use-SchlüsselwortPSR-4-Autoloading-StandardComposer-AutoloaderRückblick – Organisiertes Projekt5Schnittstellen & Verträge
Einführung in SchnittstellenSchnittstellen implementierenMehrere Schnittstellen implementierenSchnittstelle vs. abstrakte KlasseTyp-Hinweise mit SchnittstellenRückblick – Formrechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objektklonen__serialize & __unserializeRückblick – Benutzerdefinierte Sammlung11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenBenutzerdefinierte Exception-HierarchieTry, Catch, FinallyRückblick – Formularvalidator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klassen-Eigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenSchreibgeschützte Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphie
Methodenüberschreibung erneut betrachtetPolymorphie über SchnittstellenTyp-Hinweise & Union-TypenSpätes statisches BindenRückblick – Zahlungsabwickler9Traits
Einführung in TraitsMehrere Traits verwendenAuflösung von Trait-KonfliktenAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungÜbe selbstständig: Online-PHP-Compiler