요약 - 은행 계좌 관리 프로그램
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 20번째.
챌린지
쉬움이 장에서 배운 모든 클래스 속성 개념을 통합하는 완전한 은행 계좌 관리 시스템을 구축해 보겠습니다. 계좌 데이터를 적절히 캡슐화하면서 은행 전체의 통계를 추적하는 BankAccount 클래스를 만들게 됩니다.
코드는 두 개의 파일로 구성됩니다:
BankAccount.php— 개별 계좌를 관리하고 전체 은행 통계를 추적하는BankAccount클래스를 정의합니다. 클래스에는 다음이 포함되어야 합니다:100으로 설정된 상수MINIMUM_BALANCE- 생성 후 변경할 수 없는 public readonly 속성
string $accountId - 계좌 소유자 이름을 위한 public 속성
$holderName - 계좌 잔액을 보호하기 위한 private 속성
$balance 0으로 시작하는 private static 속성$totalAccounts0으로 시작하는 private static 속성$totalDeposits
getBalance()— 현재 잔액을 반환합니다.deposit($amount)— 잔액에 금액을 추가하고 전체 예금 추적기(total deposits tracker)를 업데이트한 후, 새로운 잔액을 반환합니다.withdraw($amount)— 남은 잔액이 최소 잔액 상수(minimum balance constant) 이상으로 유지되는 경우에만 잔액에서 금액을 차감하고, 새로운 잔액을 반환합니다 (출금이 허용되지 않는 경우 변경되지 않은 잔액을 반환합니다).- 정적 메서드
getTotalAccounts()— 생성된 총 계좌 수를 반환합니다. - 정적 메서드
getTotalDeposits()— 모든 계좌에서 이루어진 총 예금액의 합계를 반환합니다.
main.php— BankAccount 클래스 파일을 포함합니다. 네 개의 입력을 받게 됩니다: 첫 번째 계좌 ID, 첫 번째 소유자 이름, 두 번째 계좌 ID, 두 번째 소유자 이름. 두 계좌 모두 초기 잔액500으로 생성합니다. 첫 번째 계좌:200을 예금한 다음,100을 출금합니다. 계좌 ID, 소유자 이름, 잔액을 한 줄에"[accountId]: [holderName] - $[balance]"형식으로 출력합니다. 두 번째 계좌:300을 예금한 다음,800출금을 시도합니다 (최소 잔액 규칙으로 인해 실패해야 합니다). 이 계좌에 대해서도 동일한 형식으로 출력합니다. 마지막으로, 총 계좌 수와 총 예금액을 별도의 줄에 출력합니다:"Total Accounts: [count]""Total Deposits: $[amount]"
이 챌린지는 불변 식별자를 위한 readonly 속성, 보호된 데이터를 위한 getter 메서드가 있는 private 속성, 고정된 규칙을 위한 상수, 그리고 은행 전체 통계를 위한 static 속성과 static 메서드를 결합합니다.
직접 해보기
<?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]" 출력
?>객체 지향 프로그래밍의 모든 레슨
8매직 메서드
매직 메서드 소개__toString 및 __debugInfo__get, __set, __isset, __unset__call 및 __callStatic__clone 및 객체 복제__serialize 및 __unserialize요약 - 커스텀 컬렉션3클래스 프로퍼티
인스턴스 vs 정적 프로퍼티클래스 내 상수정적 메서드와 프로퍼티Private 및 Protected 프로퍼티Readonly 프로퍼티 (PHP 8.1)요약 - 은행 계좌 관리 프로그램