Segue a implementção que fiz usando uma Exception própria para tratar a validação do nome. Caso tenha alguma coisa para melhorar comentem:
Classe criada:
<?php
namespace Alura\Banco\Modelo;
class NomeInvalidoException extends \DomainException
{
public function __construct(string $nome)
{
$tamanhoNome = strlen($nome);
$mensagem = "Nome inválido. Um nome válido precisa ter pelo menos 5 letras e $nome possui $tamanhoNome letras.";
parent::__construct($mensagem);
}
}
Classe Pessoa onde existe o método validaNome:
<?php
namespace Alura\Banco\Modelo;
abstract class Pessoa
{
use AcessoPropriedades;
protected string $nome;
private CPF $cpf;
public function __construct(string $nome, CPF $cpf)
{
$this->validaNome($nome);
$this->nome = $nome;
$this->cpf = $cpf;
}
public function recuperaNome(): string
{
return $this->nome;
}
public function recuperaCpf(): string
{
return $this->cpf->recuperaNumeroCPF();
}
final protected function validaNome(string $nome): void
{
if (strlen($nome) < 5) {
throw new NomeInvalidoException($nome);
}
}
}
Aquivo de teste:
<?php
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 {
$titular = new Titular(
new CPF("123.456.789-10"),
"Ana",
new Endereco("Campo Grande", "Tiradentes", "A", "456")
);
} catch (NomeInvalidoException $exception) {
echo $exception->getMessage() . PHP_EOL;
}