Zusammenfassung – Bankkonto-Manager
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 20 von 91.
Aufgabe
EinfachLass uns ein vollständiges Bankkontoverwaltungssystem erstellen, das alle Konzepte zu Klasseneigenschaften zusammenführt, die du in diesem Kapitel gelernt hast. Du erstellst eine BankAccount-Klasse, die Kontodaten ordnungsgemäß kapselt und gleichzeitig bankweite Statistiken verfolgt.
Du organisierst deinen Code über zwei Dateien:
BankAccount.php: Definiere eineBankAccount-Klasse, die einzelne Konten verwaltet und die Gesamtstatistiken der Bank verfolgt. Die Klasse sollte Folgendes enthalten:- Eine Konstante
MINIMUM_BALANCE, die auf100gesetzt ist - Eine öffentliche schreibgeschützte Eigenschaft
string $accountId, die nach der Erstellung nicht mehr geändert werden kann - Eine öffentliche Eigenschaft
$holderNamefür den Namen des Kontoinhabers - Eine private Eigenschaft
$balance, um den Kontostand zu schützen - Eine private statische Eigenschaft
$totalAccounts, die mit0beginnt - Eine private statische Eigenschaft
$totalDeposits, die mit0beginnt
getBalance(): gibt den aktuellen Kontostand zurückdeposit($amount): addiert den Betrag zum Kontostand, aktualisiert den Tracker für die Gesamteinzahlungen und gibt den neuen Kontostand zurückwithdraw($amount): zieht den Betrag nur dann vom Kontostand ab, wenn der verbleibende Kontostand mindestens der Mindestkontostandskonstante entspricht, und gibt den neuen Kontostand zurück (oder den unveränderten Kontostand, wenn die Abhebung nicht zulässig ist)- Eine statische Methode
getTotalAccounts(): gibt die Gesamtzahl der erstellten Konten zurück - Eine statische Methode
getTotalDeposits(): gibt die Summe aller über alle Konten hinweg getätigten Einzahlungen zurück
- Eine Konstante
main.php: Binde die Klassendatei von BankAccount ein. Du erhältst vier Eingaben: die ID des ersten Kontos, den Namen des ersten Kontoinhabers, die ID des zweiten Kontos und den Namen des zweiten Kontoinhabers. Erstelle zwei Konten, beide mit einem Anfangssaldo von500. Für das erste Konto: Zahle200ein und hebe anschließend100ab. Gib die Konto-ID, den Namen des Kontoinhabers und den Kontostand in einer Zeile im folgenden Format aus:"[accountId]: [holderName] - $[balance]"Für das zweite Konto: Zahle300ein und versuche anschließend,800abzuheben (dies sollte aufgrund des Mindestkontostands fehlschlagen). Gib dieses Konto im selben Format aus. Gib schließlich die Gesamtzahl der Konten und die Gesamteinzahlungen in separaten Zeilen aus:"Total Accounts: [count]""Total Deposits: $[amount]"
Diese Herausforderung kombiniert schreibgeschützte Eigenschaften für unveränderliche Identifikatoren, private Eigenschaften mit Getter-Methoden für geschützte Daten, Konstanten für feste Regeln sowie statische Eigenschaften mit statischen Methoden für bankweite Statistiken.
Probier es selbst
<?php
require_once 'BankAccount.php';
// Eingaben lesen
$firstAccountId = trim(fgets(STDIN));
$firstHolderName = trim(fgets(STDIN));
$secondAccountId = trim(fgets(STDIN));
$secondHolderName = trim(fgets(STDIN));
// TODO: Erstelle das erste Konto mit einem Anfangssaldo von 500
// TODO: Erstelle das zweite Konto mit einem Anfangssaldo von 500
// TODO: Erstes Konto: 200 einzahlen, dann 100 abheben
// TODO: Infos des ersten Kontos ausgeben: "[accountId]: [holderName] - $[balance]"
// TODO: Zweites Konto: 300 einzahlen, dann versuchen, 800 abzuheben
// TODO: Infos des zweiten Kontos ausgeben: "[accountId]: [holderName] - $[balance]"
// TODO: Print "Total Accounts: [count]"
// TODO: Print "Total Deposits: $[amount]"
?>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