Admin-Interface
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 86 von 91.
Aufgabe
EinfachLassen Sie uns unser Bibliotheksverwaltungssystem erweitern, indem wir administrative Funktionen hinzufügen. Sie werden eine Admin-Klasse erstellen, die von User erbt, aber über besondere Befugnisse zur Verwaltung des Inventars der Bibliothek verfügt — das Hinzufügen neuer Bücher und das Entfernen vorhandener Bücher.
Sie werden Ihren Code über fünf 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. IhreLibrary-Klasse mit der vorhandenen Funktionalität, einschließlichaddBook(),findBook(),borrowBook(),returnBook()und den Suchmethoden. Fügen Sie eine neue Methode hinzu:removeBook(string $isbn): void— entfernt ein Buch aus der Sammlung unter Verwendung vonunset()
Admin.php— Binden Sie die Library-Datei ein. Erstellen Sie eineAdmin-Klasse, dieUsererweitert. Admins erben alle Benutzerfunktionen, erhalten aber zwei administrative Methoden:addBookToLibrary(Library $library, Book $book): string— fügt das Buch der Bibliothek hinzu und gibt"Added: [title]"zurückremoveBookFromLibrary(Library $library, string $isbn): string— versucht, ein Buch mit diesen Prüfungen zu entfernen:- Wenn das Buch nicht existiert, geben Sie
"Book not found"zurück - Wenn das Buch derzeit ausgeliehen ist, geben Sie
"Cannot remove: book is currently borrowed"zurück - Andernfalls entfernen Sie es und geben Sie
"Removed: [title]"zurück
- Wenn das Buch nicht existiert, geben Sie
main.php— Binden Sie die Admin-Datei ein. Sie erhalten zwei Eingaben: eine ISBN und einen Buchtitel.Erstellen Sie eine
Libraryund einenAdminmit der ID1und dem Namen"AdminUser". Erstellen Sie außerdem einen regulärenUsermit der ID2und dem Namen"RegularUser".Erstellen Sie ein
Bookmit der angegebenen ISBN, dem Titel und dem Autor"Test Author". Führen Sie diese Operationen aus und geben Sie jedes Ergebnis in einer neuen Zeile aus:- Lassen Sie den Admin das Buch zur Bibliothek hinzufügen
- Lassen Sie den regulären Benutzer das Buch ausleihen
- Lassen Sie den Admin versuchen, das Buch zu entfernen (sollte fehlschlagen — es ist ausgeliehen)
- Lassen Sie den regulären Benutzer das Buch zurückgeben
- Lassen Sie den Admin das Buch entfernen (sollte jetzt erfolgreich sein)
- Lassen Sie den Admin versuchen, dasselbe Buch erneut zu entfernen (sollte fehlschlagen — nicht gefunden)
Diese Herausforderung zeigt, wie Vererbung eine natürliche Hierarchie schafft — Admins sind Benutzer mit zusätzlichen Privilegien. Die Sicherheitsprüfungen in removeBookFromLibrary gewährleisten die Datenintegrität, indem sie das Entfernen von Büchern verhindern, die sich noch im Umlauf befinden.
Probier es selbst
<?php
require_once 'Admin.php';
// Eingabe lesen
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: Eine Bibliothek erstellen
// TODO: Einen Admin mit der ID 1 und dem Namen "AdminUser" erstellen
// TODO: Einen regulären Benutzer mit der ID 2 und dem Namen "RegularUser" erstellen
// TODO: Ein Buch mit der angegebenen ISBN, dem Titel und dem Autor "Test Author" erstellen
// TODO: Diese Operationen ausführen und jedes Ergebnis in einer neuen Zeile ausgeben:
// 1. Den Admin das Buch zur Bibliothek hinzufügen lassen
// 2. Den regulären Benutzer das Buch ausleihen lassen
// 3. Den Admin versuchen lassen, das Buch zu entfernen (sollte fehlschlagen - es ist ausgeliehen)
// 4. Den regulären Benutzer das Buch zurückgeben lassen
// 5. Den Admin das Buch entfernen lassen (sollte jetzt erfolgreich sein)
// 6. Den Admin versuchen lassen, dasselbe Buch erneut zu entfernen (sollte fehlschlagen - nicht gefunden)
?>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