2
respostas

Uncaught TypeError: Cannot assign CPF to property Pessoa

Boa tarde! Tenho tido esse erro com a propriedade CPF desde o módulo anterior, quando o criamos. Pensei que tivesse solucionado, mas quando criamos as novas classes Funcionário e Pessoa o erro aparece novamente... Já tentei resolver de várias maneiras, mas nada tem adiantado... Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas
<?php

class Titular extends Pessoa
{
    private Endereco $endereco;

    public function __construct(CPF $cpf, string $nome, Endereco $endereco)
{
    $this->cpf = $cpf;
    $this->validaNomeTitular($nome);
    $this->nome = $nome;
    $this->endereco = $endereco;
}

    public function recuperaEndereco(): Endereco 
    {
        return $this->endereco;
    }

}

<?php

class Funcionario extends Pessoa
{
    private string $cargo;

    public function __construct(string $nome, CPF $cpf, string $cargo)
    {
        $this->validaNomeTitular($nome);
        $this->nome = $nome;
        $this->cpf = $cpf;
        $this->cargo = $cargo;
    }


    public function recuperaCargo(): string 
    {
        return $this->cargo;
    }
}

<?php

class Pessoa
{
    public string $cpf;
    public string $nome;


    public function __construct(string $nome, CPF $cpf)
    {
        $this->nome = $nome;
        $this->cpf = $cpf;
    }

    public function recuperaNome(): string 
    {
        return $this->nome;
    }

    public function recuperaCpf(): string
    {
        return $this->cpf->recuperaNumero();
    }

    public function validaNomeTitular(string $nomeTitular)
    {
        if (strlen($nomeTitular) < 5){
            echo "Nome precisa ter pelo menos 5 caracteres";
            exit(); 
        }
    }
}

Giovana, repara nessas linhas da classe Pessoa:

    public string $cpf;
    public string $nome;


    public function __construct(string $nome, CPF $cpf)
    {
        $this->nome = $nome;
        $this->cpf = $cpf;

Você está definindo a propriedade $cpf como string e recebendo por parâmetro no construtor um objeto do tipo CPF. Não dá pra atribuir um CPF a uma string. Você precisa mudar o tipo da sua propriedade.