Segue a implementção que fiz usando a InvalidArgumentException para tratar o CPF inválido. Caso tenha alguma coisa para melhorar comentem:
Classe CPF:
<?php
namespace Alura\Banco\Modelo;
use http\Exception\InvalidArgumentException;
final class CPF
{
private string $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 recuperaNumeroCPF(): string
{
return $this->numero;
}
}
Aquivo de Teste:
<?php
use Alura\Banco\Modelo\CPF;
require_once 'autoload.php';
try {
$cpf = new CPF("123.456.789.10");
} catch (InvalidArgumentException $exception) {
echo "CPF inválido. Informe um CPF no formato 000.000.000-00.";
}