Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Resposta da atividade

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?

1 resposta
solução!

Não é necessario tipar as variaveis constantes em php, o tipo delas é definido de acordo com o valor que é atribuído nelas