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

visibilidade private em herança

Caros, A visibilidade private não permite que um método seja acessado pelas classes filhas. é isso ? Se for isso .. estou com uma dúvida. tentei forçar um erro de proposito. mas não aconteceu.

O método validaNome é private da classe Pessoa ( mãe). No método alteraNome da classe Funcionario ( filha) chamo a função validaNome. não deveria dar algum tipo de erro?

classe Funcionario

<?php

class Funcionario extends Pessoa {

    private $cargo;

    public function __construct(string $nome, Cpf $cpf, string $cargo)  {

        parent::__construct($nome, $cpf);
        $this->cargo = $cargo;
    }

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

    public function alteraNome (string $nome) : void {

        $this->validaNome($nome);
        $this->nome = $nome;
    }
}

classe Pessoa

<?php

class Pessoa {


    protected $nome;
    private $cpf;

    public function __construct(string $nome, Cpf $cpf) {

        $this->validaNome($nome);
        $this->nome = $nome;
        $this->cpf = $cpf;
    }

    public function getNome() : string {

        return $this->nome;
    }

    public function getCpf() : Cpf {

        return $this->cpf->obtemNumeroCPF();
    }

    private function validaNome (string $nome) {

        if (strlen($nome) < 5 ) { 

            echo "O nome precisa ter pelo menos 5 caraceres";
            exit();
        }
    }


}

para simular as chamadas das classes

<?php
require_once('Pessoa.php');
require_once('CPF.php');
require_once('Funcionario.php');

$func1 = new Funcionario ("Manuel", new Cpf("123.456.789-01"), "desenvolvedor");
var_dump ($func1);

2 respostas
solução!

Mary, Seu código só não falhou porque vc apenas criou a instância da classe, se tentar chamar o método, um erro será mostrado.

tem razão, Mailson! fiz um teste chamada o método alteraNome e deu erro obrigada!

$func1->alteraNome("Manuel Ferreira");