Итоги — Менеджер банковского счета
Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy — урок 20 из 91.
Задание
ЛегкоДавайте создадим полноценную систему управления банковскими счетами, которая объединит все концепции свойств классов, изученные вами в этой главе. Вы создадите класс BankAccount, который должным образом инкапсулирует данные счета и одновременно отслеживает статистику по всему банку.
Вы организуете свой код в двух файлах:
BankAccount.php— Определите классBankAccount, который управляет отдельными счетами и отслеживает общую статистику банка. Класс должен включать:- Константу
MINIMUM_BALANCE, установленную в100 - Публичное свойство только для чтения
string $accountId, которое не может быть изменено после создания - Публичное свойство
$holderNameдля имени владельца счета - Приватное свойство
$balanceдля защиты баланса счета - Приватное статическое свойство
$totalAccounts, начинающееся с0 - Приватное статическое свойство
$totalDeposits, начинающееся с0
getBalance()— возвращает текущий балансdeposit($amount)— добавляет сумму к балансу и обновляет трекер общих депозитов, возвращает новый балансwithdraw($amount)— вычитает сумму из баланса только в том случае, если остаток на балансе остается равным или превышает константу минимального баланса, возвращает новый баланс (или неизмененный баланс, если снятие средств запрещено)- Статический метод
getTotalAccounts()— возвращает общее количество созданных счетов - Статический метод
getTotalDeposits()— возвращает сумму всех депозитов, сделанных на всех счетах
- Константу
main.php— Подключите файл класса BankAccount. Вы получите четыре входных значения: ID первого счета, имя первого владельца, ID второго счета и имя второго владельца. Создайте два счета, оба с начальным балансом500. Для первого счета: внесите депозит200, затем снимите100. Выведите ID счета, имя владельца и баланс в одной строке в формате:"[accountId]: [holderName] - $[balance]"Для второго счета: внесите депозит300, затем попытайтесь снять800(это должно не удастся из-за минимального баланса). Выведите информацию об этом счете в том же формате. Наконец, выведите общее количество счетов и общую сумму депозитов на отдельных строках:"Total Accounts: [count]""Total Deposits: $[amount]"
Эта задача сочетает в себе свойства readonly для неизменяемых идентификаторов, приватные свойства с методами-геттерами для защищенных данных, константы для фиксированных правил и статические свойства со статическими методами для статистики по всему банку.
Попробуйте сами
<?php
require_once 'BankAccount.php';
// Чтение входных данных
$firstAccountId = trim(fgets(STDIN));
$firstHolderName = trim(fgets(STDIN));
$secondAccountId = trim(fgets(STDIN));
$secondHolderName = trim(fgets(STDIN));
// TODO: Создать первый аккаунт с начальным балансом 500
// TODO: Создать второй аккаунт с начальным балансом 500
// TODO: Первый аккаунт: внести 200, затем снять 100
// TODO: Вывести информацию о первом аккаунте: "[accountId]: [holderName] - $[balance]"
// TODO: Второй аккаунт: внести 300, затем попытаться снять 800
// TODO: Вывести информацию о втором аккаунте: "[accountId]: [holderName] - $[balance]"
// TODO: Вывести "Total Accounts: [count]"
// TODO: Вывести "Total Deposits: $[amount]"
?>Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово $thisМетодыСвойстваКонструктор (__construct)Деструктор (__destruct)Итоги — Простой калькулятор4Наследование
Основы наследованияКлючевое слово parent::Переопределение методовКлючевое слово finalАбстрактные классыИтоги — Иерархия сотрудников7Инкапсуляция
Public, Protected, PrivateПодробный разбор модификаторов доступаГеттеры и сеттерыСокрытие данныхConstructor Promotion (8.0)Итоги — Система учета студентов10Продвинутые концепции ООП
Композиция против наследованияВнедрение зависимостейАнонимные классыПеречисления (PHP 8.1)Файберы (PHP 8.1)Глубокое погружение в клонирование объектовГенераторы и итераторы13Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий2Пространства имен и автозагрузка
Введение в пространства именКлючевое слово useСтандарт автозагрузки PSR-4Автозагрузчик ComposerИтоги: структурированный проект5Интерфейсы и контракты
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовИнтерфейс против абстрактного классаType Hinting с интерфейсамиИтоги — Калькулятор фигур8Магические методы
Введение в магические методы__toString и __debugInfo__get, __set, __isset, __unset__call и __callStatic__clone и клонирование объектов__serialize и __unserializeИтоги — Кастомная коллекция11Система типов и обработка ошибок
Объявление типовNullable-типыТипы объединения и пересеченияКлассы исключенийИерархия пользовательских исключенийTry, Catch, FinallyИтоги — Валидатор форм14Проект: Управление библиотекой
Обзор проектаКлассы Book и User3Свойства классов
Свойства экземпляра и статические свойстваКонстанты в классахСтатические методы и свойстваПриватные и защищенные свойстваСвойства Readonly (PHP 8.1)Итоги — Менеджер банковского счета6Полиморфизм
Снова о переопределении методовПолиморфизм через интерфейсыType Hinting и Union TypesПозднее статическое связываниеИтоги — Payment Processor9Трейты
Введение в трейтыИспользование нескольких трейтовРазрешение конфликтов трейтовАбстрактные методы в трейтахТрейты и наследование12Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy