Ausleihsystem
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 84 von 91.
Aufgabe
EinfachLassen Sie uns unser Bibliotheksverwaltungssystem zum Leben erwecken, indem wir die Klasse Library erstellen, die alle Ausleihvorgänge orchestriert. Dieser zentrale Koordinator wird die Buchsammlung verwalten und die Regeln durchsetzen, die unsere Bibliothek reibungslos am Laufen halten.
Sie werden Ihren Code über vier Dateien organisieren:
Book.php— Ihre KlasseBookaus der vorherigen Lektion mit Readonly-Eigenschaften (isbn,title,author), einer privaten Eigenschaft$isAvailable, die alstruebeginnt, und den Methoden:isAvailable(),markAsBorrowed()undmarkAsReturned().User.php— Binden Sie die Datei Book ein. Ihre KlasseUsermit Readonly-Eigenschaften (id,name), einem privaten Array$borrowedBooks, einer KonstanteMAX_BOOKSvon3und den Methoden:getBorrowedBooks(),canBorrow(),addBook(Book $book)undremoveBook(string $isbn).Library.php— Binden Sie die Datei User ein. Erstellen Sie eine KlasseLibrary, die die Buchsammlung verwaltet. Ihre Bibliothek sollte Folgendes haben:- Ein privates Array
$books, um Bücher indiziert nach ISBN zu speichern addBook(Book $book): void— fügt ein Buch zur Sammlung hinzufindBook(string $isbn): ?Book— gibt das Buch zurück oder null, falls es nicht gefunden wurdeborrowBook(User $user, string $isbn): string— validiert und verarbeitet die Ausleihe und gibt entsprechende Meldungen zurückreturnBook(User $user, string $isbn): string— verarbeitet Rückgaben und aktualisiert sowohl den Buch- als auch den Benutzerstatus
Die Methode
borrowBooksollte drei Bedingungen in der angegebenen Reihenfolge prüfen und genau diese Meldungen 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 bereits 3 Bücher hat"Successfully borrowed: [title]"— bei Erfolg
Die Methode
returnBooksollte"Book not found"zurückgeben, wenn das Buch nicht existiert, oder"Successfully returned: [title]"bei Erfolg.- Ein privates Array
main.php— Binden Sie die Datei Library ein. Sie erhalten zwei Eingaben: eine ISBN und einen Buchtitel.Erstellen Sie eine
Library, einenUsermit der ID1und dem Namen"Alice"sowie einBookmit der angegebenen ISBN, dem Titel und dem Autor"Unknown". Fügen Sie das Buch der Bibliothek hinzu, führen Sie dann diese Operationen aus und geben Sie jedes Ergebnis in einer neuen Zeile aus:- Leihen Sie das Buch aus
- Versuchen Sie, dasselbe Buch erneut auszuleihen
- Geben Sie das Buch zurück
- Leihen Sie das Buch noch einmal aus
Diese Herausforderung zeigt, wie die Klasse Library die Geschäftslogik zentralisiert — sie validiert Bedingungen, koordiniert Statusänderungen über Book- und User-Objekte hinweg und gibt aussagekräftiges Feedback für jede Operation zurück.
Probier es selbst
<?php
require_once 'Library.php';
// Eingabe lesen
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: Eine Library-Instanz erstellen
// TODO: Einen User mit der ID 1 und dem Namen "Alice" erstellen
// TODO: Ein Book mit der angegebenen ISBN, dem Titel und dem Autor "Unknown" erstellen
// TODO: Das Buch zur Bibliothek hinzufügen
// TODO: Diese Operationen ausführen und jedes Ergebnis in einer neuen Zeile ausgeben:
// 1. Das Buch ausleihen
// 2. Versuchen, dasselbe Buch erneut auszuleihen
// 3. Das Buch zurückgeben
// 4. Das Buch noch einmal ausleihen
?>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