1
resposta

Não consigo deixar a mensagem de erro mais "bonita". A instrução é ignorada no arquivo de teste.

Quando faço o try - catch no arquivo de teste para exibir a mensagem de erro "Saldo Insuficiente", aparece o erro: PHP Fatal error: Uncaught Alura\Banco\Modelo\Conta\SaldoInsuficienteException: Voce tentou sacar 600, mas tem apenas 500 em conta

Isso significa que a Classe criada por mim SaldoInsuficienteException está funcionando corretamente, mas quando tento deixar o erro mais "bonito" no arquivo de teste, a instrução é ignorada. Quando realizo a mesma operação com a Classe já pronta do php InvalidArgumentException, a instrução funciona corretamente.

//Essa instrução funciona
try{
    $conta->depositar(500);
}catch(InvalidArgumentException){
    echo "Valor a depositar deve ser positivo." . PHP_EOL;
}
//Essa não. É como se não estivesse aí, já que aparece o erro criado na Classe.
try{
    $conta->sacar(600);
}catch(SaldoInsuficienteException){
    echo "Saldo Insuficiente";
}
<?php

namespace Alura\Banco\Modelo\Conta;

class SaldoInsuficienteException extends \DomainException     // Exceção do Domínio
{
    public function __construct(float $valorSaque, float $saldoAtual)
    {
        $mensagem = "Voce tentou sacar $valorSaque, mas tem apenas $saldoAtual em conta";
        parent::__construct($mensagem);
    }
}
1 resposta

Olá Luiz, tudo bem?

Desculpa pela demora para responder o seu tópico.

Bom, pelo código que você compartilhou, parece que a sua classe está funcionando corretamente, já que está sendo lançada a exceção quando necessário. No entanto, quando você tenta exibir a mensagem de erro personalizada, a instrução é ignorada.

Uma possível solução para esse problema seria utilizar o método getMessage() da exceção para exibir a mensagem personalizada. Você poderia fazer algo assim:

try {
    $conta->sacar(600);
} catch (SaldoInsuficienteException $exception) {
    echo $exception->getMessage();
}

Dessa forma, a mensagem personalizada seria exibida corretamente.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓