Podsumowanie — menedżer kont bankowych
Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 20 z 91.
Wyzwanie
ŁatwyZbudujmy kompletny system zarządzania rachunkami bankowymi, który łączy wszystkie poznane w tym rozdziale zagadnienia dotyczące właściwości klas. Utworzysz klasę BankAccount, która prawidłowo enkapsuluje dane rachunku i jednocześnie śledzi statystyki całego banku.
Rozmieścisz swój kod w dwóch plikach:
BankAccount.php: Zdefiniuj klasęBankAccount, która zarządza poszczególnymi rachunkami i śledzi ogólne statystyki banku. Klasa powinna zawierać:- Stałą
MINIMUM_BALANCEo wartości100 - Publiczną właściwość tylko do odczytu
string $accountId, której nie można zmienić po utworzeniu - Publiczną właściwość
$holderNameprzechowującą imię i nazwisko posiadacza rachunku - Prywatną właściwość
$balance, która chroni saldo rachunku - Prywatną właściwość statyczną
$totalAccountso początkowej wartości0 - Prywatną właściwość statyczną
$totalDepositso początkowej wartości0
getBalance(): zwraca bieżące saldodeposit($amount): dodaje kwotę do salda i aktualizuje licznik wpłat ogółem, a następnie zwraca nowe saldowithdraw($amount): odejmuje kwotę od salda tylko wtedy, gdy pozostałe saldo nie spadnie poniżej wartości minimalnego salda, a następnie zwraca nowe saldo (lub niezmienione saldo, jeśli wypłata jest niedozwolona)- Metodę statyczną
getTotalAccounts(): zwraca łączną liczbę utworzonych rachunków - Metodę statyczną
getTotalDeposits(): zwraca sumę wszystkich wpłat dokonanych na wszystkich rachunkach
- Stałą
main.php: Dołącz plik klasy BankAccount. Otrzymasz cztery dane wejściowe: identyfikator pierwszego rachunku, imię i nazwisko pierwszego posiadacza, identyfikator drugiego rachunku oraz imię i nazwisko drugiego posiadacza. Utwórz dwa rachunki, każdy z saldem początkowym500. Dla pierwszego rachunku: wpłać200, a następnie wypłać100. Wypisz w jednym wierszu identyfikator rachunku, imię i nazwisko posiadacza oraz saldo w formacie:"[accountId]: [holderName] - $[balance]"Dla drugiego rachunku: wpłać300, a następnie spróbuj wypłacić800(ta operacja powinna się nie powieść ze względu na minimalne saldo). Wypisz dane tego rachunku w tym samym formacie. Na koniec wypisz łączną liczbę rachunków i łączną kwotę wpłat w osobnych wierszach:"Total Accounts: [count]""Total Deposits: $[amount]"
To wyzwanie łączy właściwości tylko do odczytu, służące do przechowywania niezmiennych identyfikatorów, prywatne właściwości z metodami pobierającymi, które chronią dane, stałe określające niezmienne zasady oraz właściwości statyczne i metody statyczne służące do śledzenia statystyk całego banku.
Spróbuj swoich sił
<?php
require_once 'BankAccount.php';
// Odczytaj dane wejściowe
$firstAccountId = trim(fgets(STDIN));
$firstHolderName = trim(fgets(STDIN));
$secondAccountId = trim(fgets(STDIN));
$secondHolderName = trim(fgets(STDIN));
// TODO: Utwórz pierwsze konto z saldem początkowym 500
// TODO: Utwórz drugie konto z saldem początkowym 500
// TODO: Pierwsze konto: wpłać 200, a następnie wypłać 100
// TODO: Wyświetl informacje o pierwszym koncie: "[accountId]: [holderName] - $[balance]"
// TODO: Drugie konto: wpłać 300, a następnie spróbuj wypłacić 800
// TODO: Wyświetl informacje o drugim koncie: "[accountId]: [holderName] - $[balance]"
// TODO: Wyświetl "Total Accounts: [count]"
// TODO: Wyświetl "Total Deposits: $[amount]"
?>Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe $thisMetodyWłaściwościKonstruktor (__construct)Destruktor (__destruct)Powtórka — prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe parent::Przesłanianie metodSłowo kluczowe finalKlasy abstrakcyjnePowtórzenie – hierarchia pracowników7Enkapsulacja
Public, protected, privateModyfikatory dostępu w szczegółachGettery i setteryUkrywanie informacjiPromocja parametrów konstruktora (8.0)Podsumowanie — system ewidencji studentów2Przestrzenie nazw i autoloading
Wprowadzenie do przestrzeni nazwSłowo kluczowe useStandard autoloadingu PSR-4Autoloader ComposeraPodsumowanie – uporządkowany projekt5Interfejsy i kontrakty
Wprowadzenie do interfejsówImplementowanie interfejsówImplementowanie wielu interfejsówInterfejs a klasa abstrakcyjnaPodpowiadanie typów za pomocą interfejsówPodsumowanie — kalkulator kształtów8Metody magiczne
Wprowadzenie do metod magicznych__toString i __debugInfo__get, __set, __isset, __unset__call i __callStatic__clone i klonowanie obiektów__serialize i __unserializePodsumowanie — własna kolekcja11System typów i obsługa błędów
Deklaracje typówTypy nullableTypy sumy i przecięciaKlasy wyjątkówNiestandardowa hierarchia wyjątkówTry, Catch, FinallyPodsumowanie — walidator formularzy14Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Właściwości klas
Właściwości instancji a właściwości statyczneStałe w klasachMetody i właściwości statyczneWłaściwości prywatne i chronioneWłaściwości tylko do odczytu (PHP 8.1)Podsumowanie — menedżer kont bankowych6Polimorfizm
Ponowne omówienie nadpisywania metodPolimorfizm za pomocą interfejsówPodpowiedzi typów i typy sumyPóźne wiązanie statycznePodsumowanie — procesor płatności9Cechy
Wprowadzenie do cechKorzystanie z wielu cechRozwiązywanie konfliktów cechMetody abstrakcyjne w cechachCechy a dziedziczenie12Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator PHP online