1
resposta

Desafio Exceções - validaNome e validaCpf

  1. Criei uma exceção personalizada NomeInvalidoException para tratar o nome.
  2. Lancei essa exceção na classe Pessoa, no método validaNome.
  3. Aproveitei a exceção InvalidArgumentException para cpf com formato inválido na classe CPF.
  4. Refatorei o arquivo teste-deposito.php para capturar todas as exceções apresentadas aqui.

Vejam como ficaram os arquivos:

<?php

namespace Alura\Banco\Modelo;

class NomeInvalidoException extends \DomainException
{
    public function __construct(string $nome)
    {
        $sizeString = strlen($nome);
        $message = "Nome do Titular deve ter ao menos 5 caracteres, '$nome' tem tamanho de $sizeString!";
        parent::__construct($message);
    }
}

Classe Pessoa:

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

Classe CPF:

public function __construct(string $cpf)
    {
        $cpf = filter_var($cpf, FILTER_VALIDATE_REGEXP, [
            'options' => [
                'regexp' => '/^[0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2}$/'
            ]
        ]);
        if ($cpf === false) {
            throw new \InvalidArgumentException("Formato CPF inválido");
        }
        $this->cpf = $cpf;
    }

E por fim o arquivo teste-deposito.php reescrito utilizando as exceções que vimos:

<?php

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

require_once 'autoload.php';

try {
    $contaCorrente = new ContaCorrente(
        new Titular(
            new CPF('123.456.789-10'),
            'Jão',
            new Endereco(
                'Moc', 'Centro', 'Rua', '2022'
            )
        ));

    /*Aqui mantive o tratamento anterior para esse tipo de exceção.*/
    try {
        $contaCorrente->deposita(100);
    } catch (InvalidArgumentException $exception) {
        echo "Valor a depositar precisa ser positivo, ixpertinho!" . PHP_EOL;
    }

    echo $contaCorrente->recuperaSaldo();

    /*Aqui eu usei o multi catch para as exceções.*/
} catch (InvalidArgumentException | NomeInvalidoException $exception) {
    echo "Parametro incorreto: " . PHP_EOL;
    echo $exception->getMessage();
}
1 resposta

Oi, Elvio, como vai?

Ficou excelente! Parabéns pelo empenho nos estudos!

Continue praticando.

E qualquer dúvida pode contar com a gente aqui no fórum.

Abraços e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software