Crie uma classe ContaBancaria com métodos para realizar operações bancárias como depositar(), sacar() e consultarSaldo(). Em seguida, crie uma subclasse ContaCorrente que herda da classe ContaBancaria. Adicione um método específico para a subclasse, como cobrarTarifaMensal(), que desconta uma tarifa mensal da conta corrente.
Além disso, no método sacar() da ContaCorrente, cobre uma taxa de saque também. Armazene essa taxa como uma constante da classe.
<?php
enum AccountType: string
{
case Current = 'Current';
case Savings = 'Savings';
case Wage = 'Wage';
}
<?php
require __DIR__ .'/BankAccount.php';
require __DIR__ .'/AccountType.php';
class CurrentAccount extends BankAccount{
private const WITHDRAWAL_TAX = 0.02;
private const MONTHLY_FEE = 200.00;
public function chargeMonthlyFee(): void
{
if ($this->type === AccountType::Current) {
$this->initialBalance -= self::MONTHLY_FEE;
}
}
#[Override]
public function withdraw(float $amount): void
{
$totalWithdrawal = $amount + ($amount * self::WITHDRAWAL_TAX);
if ($totalWithdrawal > 0 && $this->initialBalance >= $totalWithdrawal) {
$this->initialBalance -= $totalWithdrawal;
}
}
public function showInfo():string{
return "Nome do titular: $this->name \n".
"Número da conta: $this->number \n".
"Taxa de saque: ".self ::WITHDRAWAL_TAX ."\n".
"Tarifa mensal: ". self::MONTHLY_FEE ."\n".
"Valor após as taxas : $this->initialBalance\n";
}
}
$account = new CurrentAccount('Carolina',11111,0,AccountType::Current);
$account->deposit(500);
$account->chargeMonthlyFee();
$account->withdraw(50);
echo $account->showInfo();
<?php
class BankAccount{
public readonly string $name;
public readonly int $number;
public float $initialBalance;
public readonly AccountType $type;
public function __construct(string $name, int $number, float $initialBalance, AccountType $type)
{
$this->name = $name;
$this->number = $number;
$this->initialBalance = $initialBalance;
$this->type = $type;
}
public function deposit(float $amount): void
{
if ($amount > 0) {
$this->initialBalance += $amount;
}
}
public function withdraw(float $amount): void
{
if ($amount > 0 && $this->initialBalance >= $amount) {
$this->initialBalance -= $amount;
}
}
public function checkBalance(): float
{
return $this->initialBalance;
}
}
Fiquei em dúvida nas tipagens das variaveis constantes pois tipei como float e meu PHP Intelephense disse que não havia necessidade de tipar varíaveis constantes , fica essa dúvida?