1
resposta

Desafio Exceções de Validação

No CPF

<?php

namespace Alura\Banco\Modelo;

use InvalidArgumentException;

final class CPF
{
    private $numero;

    public function __construct(string $numero)
    {
        $numero = filter_var($numero, FILTER_VALIDATE_REGEXP, [
            'options' => [
                'regexp' => '/^[0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2}$/'
            ]
        ]);

        if ($numero === false) {
            throw new InvalidArgumentException();
        }
        $this->numero = $numero;
    }

    public function recuperaNumero(): string
    {
        return $this->numero;
    }
}

No Nome

final protected function validaNome(string $nomeTitular)
    {
        if (strlen($nomeTitular) < 5) {
            throw new NomeInvalidoException();
        }
    }

Teste

<?php

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

require_once 'autoload.php';

try {
    $conta = new ContaCorrente(
        new Titular(
            new CPF('123.456.789-20'),
            'Tom',
            new Endereco('Campos dos Goytacazes', 'Centro', 'Avenida 28 de Março', '574')
        )
    );
}catch(NomeInvalidoException $exception){
    echo $exception->getMessage();
}
1 resposta

Oi Matheus, como vai?

Ótimo! O código ficou bem legal e você criou sua própria exception.

Parabéns pelo empenho na resolução dos desafios propostos!

Mas lembre-se que devemos sempre tratar as exceptions que podem ser lançadas em nosso código. Em seu arquivo de teste, o catch não está tratando a InvalidArgumentException que pode ser lançada caso o cpf seja inválido, o correto a se fazer seria:

catch(NomeInvalidoException | InvalidArgumentException $exception){
    echo $exception->getMessage();
}

Caso tenha quaisquer comentários ou dúvidas a respeito de alguma aula ou desafio, pode postar aqui no fórum que vamos te responder!

Abraços e bons estudos!