Administrationsoberfläche
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 86 von 91.
Aufgabe
EinfachErweitern wir unser Bibliotheksverwaltungssystem um administrative Funktionen. Du erstellst eine Admin-Klasse, die von User erbt, aber besondere Berechtigungen zur Verwaltung des Bibliotheksbestands besitzt: zum Hinzufügen neuer Bücher und zum Entfernen vorhandener Bücher.
Du organisierst deinen Code auf fünf Dateien verteilt:
Book.php: DeineBook-Klasse mit schreibgeschützten Eigenschaften (isbn,title,author), einer privaten$isAvailable-Eigenschaft, die mittruebeginnt, sowie den Methoden:isAvailable(),markAsBorrowed()undmarkAsReturned().User.php: Binde die Book-Datei ein. DeineUser-Klasse mit schreibgeschützten Eigenschaften (id,name), einem privaten$borrowedBooks-Array, einerMAX_BOOKS-Konstante mit dem Wert3sowie den Methoden:getBorrowedBooks(),canBorrow(),addBook(Book $book)undremoveBook(string $isbn).Library.php: Binde die User-Datei ein. DeineLibrary-Klasse mit der bestehenden Funktionalität einschließlichaddBook(),findBook(),borrowBook(),returnBook()und den Suchmethoden. Füge eine neue Methode hinzu:removeBook(string $isbn): void: Entfernt ein Buch mithilfe vonunset()aus der Sammlung.
Admin.php: Binde die Library-Datei ein. Erstelle eineAdmin-Klasse, dieUsererweitert. Administratoren erben alle Funktionen von Benutzern, erhalten aber zwei administrative Methoden:addBookToLibrary(Library $library, Book $book): string: Fügt das Buch zur Bibliothek hinzu und gibt"Added: [title]"zurück.removeBookFromLibrary(Library $library, string $isbn): string: Versucht, ein Buch zu entfernen, wobei folgende Prüfungen durchgeführt werden:- Wenn das Buch nicht existiert, gib
"Book not found"zurück. - Wenn das Buch derzeit ausgeliehen ist, gib
"Cannot remove: book is currently borrowed"zurück. - Andernfalls entferne es und gib
"Removed: [title]"zurück.
- Wenn das Buch nicht existiert, gib
main.php: Binde die Admin-Datei ein. Du erhältst zwei Eingaben: eine ISBN und einen Buchtitel.Erstelle eine
Libraryund einenAdminmit der ID1und dem Namen"AdminUser". Erstelle außerdem einen regulärenUsermit der ID2und dem Namen"RegularUser".Erstelle ein
Bookmit der angegebenen ISBN, dem angegebenen Titel und dem Autor"Test Author". Führe die folgenden Operationen durch und gib jedes Ergebnis in einer neuen Zeile aus:- Lass den Administrator das Buch zur Bibliothek hinzufügen.
- Lass den regulären Benutzer das Buch ausleihen.
- Lass den Administrator versuchen, das Buch zu entfernen (dies sollte fehlschlagen, da es ausgeliehen ist).
- Lass den regulären Benutzer das Buch zurückgeben.
- Lass den Administrator das Buch entfernen (dies sollte nun erfolgreich sein).
- Lass den Administrator erneut versuchen, dasselbe Buch zu entfernen (dies sollte fehlschlagen, da es nicht gefunden wurde).
Diese Aufgabe zeigt, wie Vererbung eine natürliche Hierarchie erzeugt: Administratoren sind Benutzer mit zusätzlichen Berechtigungen. 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: Erstelle eine Library
// TODO: Erstelle einen Admin mit ID 1 und Name "AdminUser"
// TODO: Erstelle einen normalen User mit ID 2 und Name "RegularUser"
// TODO: Erstelle ein Book mit der angegebenen ISBN, title und Autor "Test Author"
// TODO: Führe diese Operationen aus und gib jedes Ergebnis in einer neuen Zeile aus:
// 1. Lass den Admin das Buch zur Library hinzufügen
// 2. Lass den normalen User das Buch ausleihen
// 3. Lass den Admin versuchen, das Buch zu entfernen (sollte fehlschlagen - es ist ausgeliehen)
// 4. Lass den normalen User das Buch zurückgeben
// 5. Lass den Admin das Buch entfernen (sollte jetzt gelingen)
// 6. Lass den Admin versuchen, dasselbe Buch erneut zu entfernen (sollte fehlschlagen - nicht gefunden)
?>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