Olá, Michael.
Parabéns pela dedicação em resolver o desafio! O seu código tá muito bem estruturado, legível e cumpre o objetivo principal de simular as operações bancárias. É muito legal ver que você utilizou o trim() junto com o fgets(), isso ajuda muito a limpar espaços em branco e quebras de linha indesejadas na entrada de dados.
Tenho apenas algumas observações e sugestões.
- Validação de Saldo (Regra de Negócio)
No seu código atual, na opção 2 (Sacar), o sistema permite que o saldo fique negativo, pois ele subtrai o valor antes de verificar se há dinheiro suficiente.
Se o usuário tiver R$ 1200 e tentar sacar R$ 5000, o saldo vai para -3800. Pra evitar isso, podemos adicionar uma verificação simples com if:
} elseif ($opcao == 2) {
echo "Qual valor pretende sacar? \n";
$saque = (float) trim(fgets(STDIN)); // É bom forçar ser número (float)
if ($saque > $saldo) {
echo "Saldo insuficiente para este saque!\n";
} else {
$saldo -= $saque; // Equivalente a $saldo = $saldo - $saque;
echo "\n Boa tarde, Sr. {$titular}. Você realizou um saque de R$ {$saque}, agora seu saldo é de R$ {$saldo}. \n";
}
}
2. O Loop do-while vs while
O enunciado pedia o uso do do-while. Embora o while (que você usou) funcione perfeitamente, a diferença didática é interessante:
while: Verifica a condição antes de executar. Se $continuar começasse como false, o menu nunca apareceria.do-while: Executa o bloco pelo menos uma vez e verifica a condição depois. Isso é ideal para menus, pois garantimos que as opções apareçam ao menos uma vez para o usuário antes de checar se ele quer sair.
3. Switch vs If/Else
Você usou if/elseif, o que está correto! Mas em estruturas de menu, onde testamos uma única variável ($opcao) contra vários valores fixos (1, 2, 3, 4), o switch costuma deixar o código um pouco mais limpo visualmente. Fica a dica para testar depois!
Você está no caminho certo!
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!