Ôn tập: Trình quản lý tài khoản ngân hàng
Thuộc phần Lập trình hướng đối tượng trong hành trình PHP của Coddy. Bài học 20 trên 91.
Thử thách
DễHãy xây dựng một hệ thống quản lý tài khoản ngân hàng hoàn chỉnh, kết hợp tất cả các khái niệm về thuộc tính lớp mà bạn đã học trong chương này. Bạn sẽ tạo một lớp BankAccount để đóng gói dữ liệu tài khoản đúng cách, đồng thời theo dõi số liệu thống kê trên toàn ngân hàng.
Bạn sẽ sắp xếp code trong hai tệp:
BankAccount.php: Định nghĩa lớpBankAccountđể quản lý từng tài khoản và theo dõi số liệu thống kê tổng thể của ngân hàng. Lớp này cần có:- Một hằng số
MINIMUM_BALANCEđược đặt thành100 - Một thuộc tính public readonly
string $accountIdkhông thể thay đổi sau khi tạo - Một thuộc tính public
$holderNamelưu tên chủ tài khoản - Một thuộc tính private
$balanceđể bảo vệ số dư tài khoản - Một thuộc tính static private
$totalAccountscó giá trị ban đầu là0 - Một thuộc tính static private
$totalDepositscó giá trị ban đầu là0
getBalance(): trả về số dư hiện tạideposit($amount): cộng vào số dư và cập nhật bộ theo dõi tổng tiền gửi, sau đó trả về số dư mớiwithdraw($amount): trừ tiền khỏi số dư chỉ khi số dư còn lại bằng hoặc cao hơn hằng số số dư tối thiểu, sau đó trả về số dư mới (hoặc số dư không đổi nếu không thể rút tiền)- Một phương thức static
getTotalAccounts(): trả về tổng số tài khoản đã tạo - Một phương thức static
getTotalDeposits(): trả về tổng số tiền đã gửi vào tất cả tài khoản
- Một hằng số
main.php: Thêm tệp lớp BankAccount. Bạn sẽ nhận bốn đầu vào: mã tài khoản thứ nhất, tên chủ tài khoản thứ nhất, mã tài khoản thứ hai và tên chủ tài khoản thứ hai. Tạo hai tài khoản, mỗi tài khoản có số dư ban đầu là500. Với tài khoản thứ nhất: gửi200, sau đó rút100. In mã tài khoản, tên chủ tài khoản và số dư trên một dòng theo định dạng:"[accountId]: [holderName] - $[balance]"Với tài khoản thứ hai: gửi300, sau đó thử rút800(thao tác này sẽ thất bại vì số dư tối thiểu). In thông tin tài khoản theo cùng định dạng. Cuối cùng, in tổng số tài khoản và tổng số tiền gửi trên các dòng riêng:"Total Accounts: [count]""Total Deposits: $[amount]"
Thử thách này kết hợp thuộc tính readonly để tạo mã định danh không thể thay đổi, thuộc tính private cùng phương thức getter để bảo vệ dữ liệu, hằng số cho các quy tắc cố định, và thuộc tính static cùng phương thức static để theo dõi số liệu thống kê trên toàn ngân hàng.
Tự làm thử
<?php
require_once 'BankAccount.php';
// Đọc dữ liệu đầu vào
$firstAccountId = trim(fgets(STDIN));
$firstHolderName = trim(fgets(STDIN));
$secondAccountId = trim(fgets(STDIN));
$secondHolderName = trim(fgets(STDIN));
// TODO: Tạo tài khoản thứ nhất với số dư ban đầu là 500
// TODO: Tạo tài khoản thứ hai với số dư ban đầu là 500
// TODO: Tài khoản thứ nhất: gửi 200, sau đó rút 100
// TODO: In ra thông tin tài khoản thứ nhất: "[accountId]: [holderName] - $[balance]"
// TODO: Tài khoản thứ hai: gửi 300, sau đó thử rút 800
// TODO: In ra thông tin tài khoản thứ hai: "[accountId]: [holderName] - $[balance]"
// TODO: In ra "Total Accounts: [count]"
// TODO: In ra "Total Deposits: $[amount]"
?>Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa $thisPhương thứcThuộc tínhHàm khởi tạo (__construct)Hàm hủy (__destruct)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnTừ khóa parent::Ghi đè phương thứcTừ khóa finalLớp trừu tượngÔn tập: hệ thống phân cấp nhân viên7Đóng gói
Công khai, được bảo vệ, riêng tưTìm hiểu sâu về bộ điều chỉnh quyền truy cậpGetter và setterẨn thông tinRút gọn hàm khởi tạo (8.0)Ôn tập: hệ thống hồ sơ học sinh2Không gian tên và tự động nạp
Giới thiệu về không gian tênTừ khóa useChuẩn tự động nạp PSR-4Trình tự động nạp của ComposerÔn tập: dự án có tổ chức5Giao diện và hợp đồng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnGiao diện và lớp trừu tượngGợi ý kiểu với giao diệnÔn tập: Máy tính hình học8Phương thức ma thuật
Giới thiệu về phương thức ma thuật__toString và __debugInfo__get, __set, __isset, __unset__call và __callStatic__clone và sao chép đối tượng__serialize và __unserializeÔn tập: Bộ sưu tập tùy chỉnh3Thuộc tính của lớp
Thuộc tính instance và staticHằng số trong lớpPhương thức và thuộc tính staticThuộc tính private và protectedThuộc tính chỉ đọc (PHP 8.1)Ôn tập: Trình quản lý tài khoản ngân hàng6Đa hình
Xem lại việc ghi đè phương thứcĐa hình qua giao diệnGợi ý kiểu và kiểu hợpLiên kết tĩnh muộnÔn tập: bộ xử lý thanh toánTự luyện tập: Trình biên dịch PHP online