Ausleihsystem
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 84 von 91.
Aufgabe
EinfachLassen wir unser Bibliotheksverwaltungssystem zum Leben erwachen, indem wir die Klasse Library erstellen, die alle Ausleihvorgänge koordiniert. Diese zentrale Koordinationsstelle verwaltet die Büchersammlung und setzt die Regeln durch, die dafür sorgen, dass unsere Bibliothek reibungslos funktioniert.
Du organisierst deinen Code über vier Dateien:
Book.php: DeineBook-Klasse aus der vorherigen Lektion mit readonly-Eigenschaften (isbn,title,author), einer privaten$isAvailable-Eigenschaft, die mittruebeginnt, und den Methoden:isAvailable(),markAsBorrowed()undmarkAsReturned().User.php: Binde die Book-Datei ein. DeineUser-Klasse mit readonly-Eigenschaften (id,name), einem privaten$borrowedBooks-Array, einerMAX_BOOKS-Konstante mit dem Wert3und den Methoden:getBorrowedBooks(),canBorrow(),addBook(Book $book)undremoveBook(string $isbn).Library.php: Binde die User-Datei ein. Erstelle eineLibrary-Klasse, die die Büchersammlung verwaltet. Deine Bibliothek sollte Folgendes enthalten:- Ein privates
$books-Array zum Speichern von Büchern, indiziert nach ISBN addBook(Book $book): void: fügt ein Buch zur Sammlung hinzufindBook(string $isbn): ?Book: gibt das Buch zurück oder null, wenn es nicht gefunden wurdeborrowBook(User $user, string $isbn): string: validiert und verarbeitet die Ausleihe und gibt entsprechende Nachrichten zurückreturnBook(User $user, string $isbn): string: verarbeitet die Rückgabe und aktualisiert sowohl den Zustand des Buchs als auch den des Benutzers
Die Methode
borrowBooksollte drei Bedingungen in der angegebenen Reihenfolge prüfen und diese exakten Nachrichten zurückgeben:"Book not found": wenn das Buch nicht existiert"Book is not available": wenn es bereits ausgeliehen ist"Borrowing limit reached": wenn der Benutzer 3 Bücher hat"Successfully borrowed: [title]": bei Erfolg
Die Methode
returnBooksollte"Book not found"zurückgeben, wenn das Buch nicht existiert, oder bei Erfolg"Successfully returned: [title]".- Ein privates
main.php: Binde die Library-Datei ein. Du erhältst zwei Eingaben: eine ISBN und einen Buchtitel.Erstelle eine
Library, einenUsermit der ID1und dem Namen"Alice"sowie einBookmit der angegebenen ISBN, dem angegebenen Titel und dem Autor"Unknown". Füge das Buch zur Bibliothek hinzu, führe anschließend die folgenden Vorgänge aus und gib jedes Ergebnis in einer neuen Zeile aus:- Leihe das Buch aus
- Versuche, dasselbe Buch erneut auszuleihen
- Gib das Buch zurück
- Leihe das Buch ein weiteres Mal aus
Diese Herausforderung zeigt, wie die Klasse Library die Geschäftslogik zentralisiert. Sie validiert Bedingungen, koordiniert Zustandsänderungen über Book- und User-Objekte hinweg und gibt für jeden Vorgang aussagekräftige Rückmeldungen zurück.
Probier es selbst
<?php
require_once 'Library.php';
// Eingabe lesen
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: Erstelle eine Library-Instanz
// TODO: Erstelle einen User mit ID 1 und Namen "Alice"
// TODO: Erstelle ein Book mit der angegebenen ISBN, dem Titel und dem Autor "Unknown"
// TODO: Füge das Buch zur Library hinzu
// TODO: Führe diese Operationen aus und gib jedes Ergebnis in einer neuen Zeile aus:
// 1. Leihe das Buch aus
// 2. Versuche, dasselbe Buch erneut auszuleihen
// 3. Gib das Buch zurück
// 4. Leihe das Buch noch einmal aus
?>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