复习:银行账户管理器
本课属于 Coddy PHP 学习旅程的“面向对象编程”单元。第 20 课,共 91 课。
挑战
简单让我们构建一个完整的银行账户管理系统,综合运用你在本章学过的所有类属性概念。你将创建一个 BankAccount 类,妥善封装账户数据,同时跟踪整个银行的统计数据。
你将把代码分为两个文件:
BankAccount.php:定义一个BankAccount类,用于管理单个账户并跟踪银行的整体统计数据。这个类应包含:- 一个设为
100的常量MINIMUM_BALANCE - 一个公开的只读属性
string $accountId,创建后不能更改 - 一个公开属性
$holderName,用于存储账户持有人的姓名 - 一个私有属性
$balance,用于保护账户余额 - 一个初始值为
0的私有静态属性$totalAccounts - 一个初始值为
0的私有静态属性$totalDeposits
getBalance():返回当前余额deposit($amount):增加余额并更新存款总额统计,返回新余额withdraw($amount):仅当剩余余额不低于最低余额常量时才扣除相应金额,返回新余额(如果不允许取款,则返回未改变的余额)- 一个静态方法
getTotalAccounts():返回创建的账户总数 - 一个静态方法
getTotalDeposits():返回所有账户的存款总额
- 一个设为
main.php:引入 BankAccount 类文件。你将收到 4 个输入:第一个账户 ID、第一个持有人姓名、第二个账户 ID 和第二个持有人姓名。创建两个账户,初始余额都为500。 对于第一个账户:存入200,然后取出100。按照以下格式,在一行中输出账户 ID、持有人姓名和余额:"[accountId]: [holderName] - $[balance]"对于第二个账户:存入300,然后尝试取出800(由于最低余额限制,取款应失败)。按照相同格式输出此账户的信息。 最后,分别在单独的行中输出账户总数和存款总额:"Total Accounts: [count]""Total Deposits: $[amount]"
这个挑战综合运用了只读属性来存储不可变标识符、带有 getter 方法的私有属性来保护数据、常量来设定固定规则,以及静态属性和静态方法来统计整个银行的数据。
亲手试试
<?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]”
?>面向对象编程中的所有课
自己练习: PHP 在线编译器