Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

No vídeo foi mostrado a necessidade de manter as variaveis do nome e CPF públicas, mas no PHP 7.4.1 isso não ocorre, porque?

<?php

class Pessoa
{
    private string $nome;
    private Cpf $cpf;

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

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

    public function recuperarCpf(): Cpf
    {
        return $this->cpf;
    }

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

class Funcionario extends Pessoa
{
    private string $cargo;

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

    public function recuperarCargo(string $cargo)
    {
        return $this->cargo;
    }
}
<?php

class Titular extends Pessoa
{
    private Endereco $endereco;

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

    public function recuperarEndereco(): Endereco
    {
        return $this->endereco;
    }
}
6 respostas

Olá, Humberto. Não entendi sua dúvida. Consegue me explicar melhor?

Ah, acho que entendi.

Você está dizendo que as classes Titular e Funcionario não deram erro, certo?

Pois é. Se você der um var_dump nos objetos gerados, verá que estas propriedades estão agora públicas.

Estas classes não possuem os atributos $nome e $cpf e no PHP, quando você tenta inicilizar um atributo que não existe, ele cria automaticamente de forma pública.

Por isso não dá erro, mas o resultado não é o esperado pois não conseguimos controlar a visiblidade e encapsular estes atributos.

Olá Vinícius, obrigado por responder. A minha dúvida foi em relação ao modo de proteção, pois estava anteriormente como 'public' e modifiquei para 'private' posteriormente e não houve erro conforme mostrado no vídeo. Desse modo queria saber porque o $nome e $cpf não deixaram de ser definidos após definir-los como 'private' na classe Pessoa?

E atualmente o meu código não tem $nome e $cpf nas três classes, apenas na classe Pessoa.

solução!

Humberto, o código funciona pelo motivo que expliquei na resposta anterior. No meu projeto, se eu executasse o código, também funcionaria. A IDE que já me mostra o erro pra evitar os comportamentos dinâmicos do PHP (tá aí mais uma vantagem de se utilizar IDE).

:-D

Obrigado. Eu acho que agora compreendi.