Modifiquei o construtor da Classe "CPF", aplicando a exceção nativa InvalidArgumentException, a qual é lançada caso a string "$numero" não for do tipo esperado (XXX.XXX.XXX-XX);
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("O CPF precisa conter 11 caracteres numéricos (XXX.XXX.XXX-XX)");
}
$this->numero = $numero;
}
Além disso, alterei a função final protegida "validaNome", utilizando a exceção nativa LengthException, a qual é lançada se o número de caracteres da string "$nomeTitular" for inválido (menor que 5 letras);
final protected function validaNome(string $nomeTitular)
{
if (strlen($nomeTitular) < 5) {
throw new \LengthException("O nome precisa conter 5 letras no mínimo ");
}
}
Por fim, utilizei o arquivo criado anteriormente pelo Vinicius para poder validar as alterações;
<?php
require_once 'autoload.php';
use Alura\Banco\Modelo\Conta\Titular;
use Alura\Banco\Modelo\Endereco;
use Alura\Banco\Modelo\CPF;
$endereco = new Endereco('Petrópolis', 'um bairro', 'minha rua', '71B');
try {
$vinicius = new Titular(new CPF('123.456.789-01'), 'Vinicius', $endereco);
}catch(InvalidArgumentException | LengthException $exception){
echo $exception -> getMessage().PHP_EOL;
}