Buch- und Benutzerklassen
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 83 von 91.
Aufgabe
EinfachErstellen wir die Grundlage unseres Bibliotheksverwaltungssystems, indem wir die Klassen Book und User erstellen. Diese zentralen Domänenobjekte werden zusammenarbeiten, um die Bibliotheksabläufe zu verwalten.
Du wirst deinen Code auf drei Dateien verteilen:
Book.php: Erstelle eine KlasseBook, die die Bücher der Bibliothek verwaltet. Dein Buch sollte drei schreibgeschützte Eigenschaften haben, die über die Konstruktor-Promotion festgelegt werden:isbn,titleundauthor. Füge eine private Eigenschaft$isAvailablehinzu, die mittruebeginnt. Füge drei Methoden hinzu:isAvailable(): bool: gibt den Verfügbarkeitsstatus zurückmarkAsBorrowed(): void: setzt die Verfügbarkeit auf falsemarkAsReturned(): void: setzt die Verfügbarkeit auf true
User.php: Binde die Book-Datei ein und erstelle eine KlasseUser, die Bibliotheksmitglieder darstellt. Dein Benutzer sollte über die Konstruktor-Promotion zwei schreibgeschützte Eigenschaften haben:id(int) undname(string). Füge ein privates Array$borrowedBooks(anfangs leer) und eine KonstanteMAX_BOOKSmit dem Wert3hinzu. Füge diese Methoden hinzu:getBorrowedBooks(): array: gibt das Array der ausgeliehenen Bücher zurückcanBorrow(): bool: gibt true zurück, wenn der Benutzer weniger als MAX_BOOKS Bücher ausgeliehen hataddBook(Book $book): void: fügt ein Buch zum Array der ausgeliehenen Bücher hinzuremoveBook(string $isbn): void: entfernt ein Buch anhand der ISBN mithilfe vonarray_filter
main.php: Binde die User-Datei ein und erwecke deine Klassen zum Leben. Du erhältst vier Eingaben: eine Benutzer-ID, den Benutzernamen, die ISBN eines Buches und den Buchtitel (der Autor wird"Unknown"sein).Erstelle mit den bereitgestellten Werten einen
Userund einBook. Gib zunächst aus, ob der Benutzer ein Buch ausleihen kann, lasse den Benutzer dann das Buch ausleihen (markiere es als ausgeliehen und füge es dem Benutzer hinzu). Gib schließlich die Verfügbarkeit des Buches und die Anzahl der ausgeliehenen Bücher aus.Ausgabeformat:
Can borrow: [yes/no] Book available: [yes/no] Books borrowed: [count]
Beachte, wie die Kapselung den internen Zustand schützt: Die Verfügbarkeit eines Buches wird nur durch dedizierte Methoden geändert, und die ausgeliehenen Bücher eines Benutzers werden über kontrollierten Zugriff verwaltet. Diese Grundlage wird das Ausleihsystem unterstützen, das wir als Nächstes entwickeln werden.
Probier es selbst
<?php
require_once 'User.php';
// Eingaben lesen
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";
// TODO: Erstelle ein User-Objekt mit der angegebenen id und name
// TODO: Erstelle ein Book-Objekt mit der angegebenen isbn, title und author
// TODO: Gib aus, ob der User anfangs ausleihen kann
// Format: "Can borrow: yes" or "Can borrow: no"
// TODO: Lass den User das Buch ausleihen:
// - Markiere das Buch als ausgeliehen
// - Füge das Buch zu den ausgeliehenen Büchern des Users hinzu
// TODO: Gib die Verfügbarkeit des Buchs aus
// Format: "Book available: yes" or "Book available: no"
// TODO: Gib die Anzahl der ausgeliehenen Bücher aus
// Format: "Books borrowed: [count]"
?>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