Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro para achar a classe de exceção

Bom dia. Ao usar a classe de exceção criada estou tendo o seguinte erro:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Código:

<?php

use Alura\Banco\Modelo\Conta\{ContaPoupanca, ContaCorrente, Titular};
use Alura\Banco\Modelo\{CPF, Endereco};

require_once 'autoload.php';

$conta = new ContaPoupanca(
    new Titular(
        new CPF('123.456.789-10'),
        'Vinicius Dias',
        new Endereco('Petrópolis', 'bairro Teste', 'Rua lá', '37')
    )
);
$conta->deposita(500);

try{
    $conta->saca(1000);
}
catch(SaldoInsuficienteException $ex){
    echo $ex->getMessage();
}

echo $conta->recuperaSaldo();

Tentei criar um namespace, mesmo que não tenha sido criada na aula, mas acontece isso:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Olá Karolina, eu acredito que está dando erro porque as classes criadas devem herdar da classe Exception, que é a classe base das exceções.

solução!

Karolina, você se esqueceu de importar os namespaces nos 2 casos. No seu teste-saque.php você está usando uma classe SaldoInsuficienteException sem informar o namespace, logo, o PHP vai buscar essa classe no namespace global, mas ela não existe lá. Sendo assim, você precisa de um dos dois:

  1. Aidionar no início do arquivo use Alura\Banco\Modelo\Conta\SaldoInsuficienteException
  2. Usar no nome completo no catch com catch (Alura\Banco\Modelo\Conta\SaldoInsuficienteException $ex)

O mesmo erro ocorre ao tentar definir a classe pois você não informou que quer buscar a classe DomainException do namespace global. O padrão do PHP, como foi ensinado no segundo curso de OO, é buscar as classes no mesmo namespace. Você está definido a classe no namespace Alura\Banco\Modelo\Conta, então o PHP vai buscar DomainException nesse namespace. Para informar que é do namespace padrão, você pode:

  1. Adicionar use DomainException; no início do arquivo
  2. Usar o nome completo com extends \DomainException

Nesse tópico isso também foi explicado: https://cursos.alura.com.br/forum/topico-sobre-antes-da-excecao-230165