Buch- und Benutzerklassen
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 83 von 91.
Aufgabe
EinfachLassen Sie uns das Fundament für unser Bibliotheksverwaltungssystem legen, indem wir die Klassen Book und User erstellen. Diese Kern-Domain-Objekte werden zusammenarbeiten, um den Bibliotheksbetrieb zu verwalten.
Sie werden Ihren Code über drei Dateien organisieren:
Book.php— Erstellen Sie eine KlasseBook, die Bibliotheksbücher verwaltet. Ihr Buch sollte drei Readonly-Eigenschaften haben, die über Constructor Promotion gesetzt werden:isbn,titleundauthor. Fügen Sie eine private Eigenschaft$isAvailablehinzu, die initial auftruegesetzt ist. Fügen Sie 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— Binden Sie die Book-Datei ein und erstellen Sie eine KlasseUser, die Bibliotheksmitglieder repräsentiert. Ihr Benutzer sollte zwei Readonly-Eigenschaften über Constructor Promotion haben:id(int) undname(string). Fügen Sie ein privates Array$borrowedBooks(initial leer) und eine KonstanteMAX_BOOKShinzu, die auf3gesetzt ist. Fügen Sie 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 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 unter Verwendung vonarray_filter
main.php— Binden Sie die User-Datei ein und erwecken Sie Ihre Klassen zum Leben. Sie erhalten vier Eingaben: eine Benutzer-ID, einen Benutzernamen, eine Buch-ISBN und einen Buchtitel (der Autor wird"Unknown"sein).Erstellen Sie einen
Userund einBookmit den bereitgestellten Werten. Geben Sie aus, ob der Benutzer anfangs ausleihen kann, lassen Sie den Benutzer dann das Buch ausleihen (markieren Sie es als ausgeliehen und fügen Sie es dem Benutzer hinzu). Geben Sie abschließend 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]
Beachten Sie, wie die Kapselung den internen Zustand schützt — die Verfügbarkeit eines Buches ändert sich nur über dedizierte Methoden, und die ausgeliehenen Bücher eines Benutzers werden über kontrollierten Zugriff verwaltet. Dieses Fundament wird das Ausleihsystem unterstützen, das wir als Nächstes bauen 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: Erstellen Sie ein User-Objekt mit der angegebenen ID und dem Namen
// TODO: Erstellen Sie ein Book-Objekt mit der angegebenen ISBN, dem Titel und dem Autor
// TODO: Geben Sie aus, ob der Benutzer anfangs ausleihen kann
// Format: "Can borrow: yes" oder "Can borrow: no"
// TODO: Lassen Sie den Benutzer das Buch ausleihen:
// - Markieren Sie das Buch als ausgeliehen
// - Fügen Sie das Buch den ausgeliehenen Büchern des Benutzers hinzu
// TODO: Geben Sie die Verfügbarkeit des Buches aus
// Format: "Book available: yes" oder "Book available: no"
// TODO: Geben Sie die Anzahl der ausgeliehenen Bücher aus
// Format: "Books borrowed: [Anzahl]"
?>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