Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Utilizando o VSCode ocorre erros com a classe CPF

Boa noite!

Ao puxar o "::construct" ocorre o seguinte erro:

Erro

Ele não esta aceitando o tipo do elemento ser 'CPF' e só quer aceitar o tipo string quando chamo o CPF.

Os meus códigos estão iguais a da video aula:

Vi linha por linha conforme a aula, mas não vejo como resolver! @.@

<?php
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) {
            echo 'CPF Inválido';
            exit();
        }
        $this->numero = $numero;
    }
    public function getNumero(): string {
        return $this->numero;
    }
}
<?php

Class Titular extends Pessoa {    
    private $endereco;
    public function __construct(CPF $cpf, string $nome, Endereco $endereco) {

        parent::__construct($cpf, $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) {
        parent::__construct($nome, $cpf);
        $this->cargo = $cargo;
    }    
    public function getCargo() : string {
        return $this->cargo;        
    }    
}
<?php 

class Pessoa {
    public string $nome;
    public string $cpf;    
    public function __construct(string $nome, string $cpf){
        $this->validaNomeTitular($nome);
        $this->nome = $nome;
        $this->cpf = $cpf;
    }
    public function getNome (): string {
        return $this->nome;
    }
    public function getcpf (): string {
        return $this->cpf;
    }
    public function validaNomeTitular (string $nomeTitular) {
        if (strlen($nomeTitular) < 5) {
            echo "O nome deve ter mais de 5 caracteres!";
            exit();
        }
    }
}
1 resposta
solução!

Oii, Matheus. Tudo bem?

Parece que o problema está na classe Pessoa. Você colocou o argumento cpf como string no __construct. Além disso, na classe Titular você está passando como primeiro parâmetro para o parent::__constuct o cpf, enquanto o primeiro parâmetro espera o nome.

Toma cuidado com a ordem, pois ela importa.

Espero ter ajudado, bons estudos :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software