Validação CPF
<?php
namespace Alura\Banco\Modelo;
use http\Exception\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;
}
Validação Nome
<?php
namespace Alura\Banco\Modelo;
use Alura\Banco\Modelo\Conta\NomeInvalidoException;
abstract class Pessoa
{
use AcessoPropriedades;
protected $nome;
private $cpf;
final protected function validaNome(string $nome)
{
if (strlen($nome) < 5) {
throw new NomeInvalidoException($nome);
}
}
}
Teste
<?php
use Alura\Banco\Modelo\Conta\{ContaPoupanca, ContaCorrente, NomeInvalidoException, SaldoInsuficienteException, Titular};
use Alura\Banco\Modelo\{CPF, Endereco};
require_once 'autoload.php';
try {
$conta = new ContaCorrente(
new Titular(
new CPF('123.456.789-20'),
'Pedro Ramos',
new Endereco('Petrópolis', 'b Teste', 'Rua lá', '31')
)
);
} catch (InvalidArgumentException $problema){
echo $problema->getMessage().PHP_EOL;
} catch (NomeInvalidoException $problema){
echo $problema->getMessage();
}