Повторение — менеджер банковского счёта
Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 20 из 91.
Задание
ЛегкоДавайте создадим полноценную систему управления банковскими счетами, которая объединяет все изученные вами в этой главе концепции свойств class. Вы создадите class BankAccount, который правильно инкапсулирует данные account и одновременно отслеживает общую статистику банка.
Вы организуете код в двух файлах:
BankAccount.php: Define classBankAccount, который управляет отдельными account и отслеживает общую статистику банка. class должен включать:- constant
MINIMUM_BALANCE, установленную в значение100 - public readonly property
string $accountId, которую нельзя изменить после создания - public property
$holderNameдля имени владельца account - private property
$balanceдля защиты баланса account - private static property
$totalAccounts, начинающуюся со значения0 - private static property
$totalDeposits, начинающуюся со значения0
getBalance(): возвращает current балансdeposit($amount): добавляет сумму к балансу и обновляет счётчик общего количества Deposits, возвращает новый балансwithdraw($amount): вычитает сумму из баланса только в том случае, если оставшийся баланс не опускается ниже constant минимального баланса, возвращает новый баланс (или неизменённый баланс, если снятие не allowed)- static method
getTotalAccounts(): возвращает общее количество созданных account - static method
getTotalDeposits(): возвращает сумму всех Deposits, выполненных по всем account
- constant
main.php: подключите файл с class BankAccount. Вы получите четыре inputs: ID first account, имя first владельца, ID second account и имя second владельца. Создайте два account, оба с initial балансом500. Для first account: внесите200, затем снимите100. Выведите ID account, имя владельца и баланс в одной строке в формате:"[accountId]: [holderName] - $[balance]"Для second account: внесите300, затем attempt снимите800(это должно завершиться неудачей из-за минимального баланса). Выведите информацию об этом account в том же формате. Наконец, выведите общее количество account и общее количество Deposits в отдельных строках:"Total Accounts: [count]""Total Deposits: $[amount]"
Это challenge объединяет properties readonly для неизменяемых идентификаторов, private properties с method getter для защищённых данных, constants для фиксированных правил и static properties со static method для общей статистики банка.
Попробуйте сами
<?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: Print "Total Accounts: [count]"
// TODO: Print "Total Deposits: $[amount]"
?>Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово $thisМетодыСвойстваКонструктор (__construct)Деструктор (__destruct)Повторение — простой калькулятор4Наследование
Основы наследованияКлючевое слово parent::Переопределение методовКлючевое слово finalАбстрактные классыПовторение — иерархия сотрудников7Инкапсуляция
Public, Protected, PrivateМодификаторы доступа подробноГеттеры и сеттерыСокрытие информацииПродвижение конструктора (8.0)Повторение — система учёта студентов2Пространства имён и автозагрузка
Введение в пространства имёнКлючевое слово useСтандарт автозагрузки PSR-4Автозагрузчик ComposerПовторение — структурированный проект5Интерфейсы и контракты
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовИнтерфейс и абстрактный классАннотация типов с интерфейсамиПовторение — калькулятор фигур8Магические методы
Введение в магические методы__toString и __debugInfo__get, __set, __isset, __unset__call и __callStatic__clone и клонирование объектов__serialize и __unserializeПовторение — пользовательская коллекция3Свойства классов
Свойства экземпляра и статические свойстваКонстанты в классахСтатические методы и свойстваПриватные и защищённые свойстваСвойства только для чтения (PHP 8.1)Повторение — менеджер банковского счёта6Полиморфизм
Повторение переопределения методовПолиморфизм через интерфейсыАннотации типов и объединённые типыПозднее статическое связываниеПовторение — обработчик платежей9Трейты
Введение в трейтыИспользование нескольких трейтовРазрешение конфликтов трейтовАбстрактные методы в трейтахТрейты и наследование12Паттерны проектирования, часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн StrategyПотренируйтесь самостоятельно: Онлайн-компилятор PHP