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

POO __construct.

Ola, eu tenho uma duvida com o metodo __contruct do php. Se eu tenho uma classe Pessoa por ex, onde essa classe tem como prametros $nome e $cpf, e eu criar uma outra classe chamada Trabalhador, que extende a classe Pessoa, eu preciso criar uma chamada para o construtor da classe Pessoa dentro da classe Trabalhador?, ou quando eu instanciar um objeto do tipo Trabalhador, o construtor da classe Pessoa sera chamado automaticamente?

3 respostas

O metodo construtor da classe pai não é chamado automaticamente. Você pode ou não chamar o metodo construtor da classe pai, vai depender do que você esta querendo fazer.

class pessoa{
    private string $nome;
    private string $cpf;

    public function __construct($nome,$cpf){
        $this->nome = $nome;
        $this->cpf = $cpf;
        echo "executnado cosntrutor pessoas";
    }
}

class trabalhador extends pessoa{
    private string $setor;

    public function __construct($setor)
    {
        $this->setor = $setor;
    }
}

$trabalhador = new trabalhador('Secretário');

var_dump($trabalhador);

//resultado do var_dump

object(trabalhador)#1 (1) {
  [
      "setor":"trabalhador":private]=>  string(11) "Secretário"
  ["nome":"pessoa":private]=>   uninitialized(string) // note que os atributos da classe pessoa não foram inicializados
  ["cpf":"pessoa":private]=>   uninitialized(string)
}

Os atributos da classe pessoa não foram inicializados.

<?php

class pessoa{
    private string $nome;
    private string $cpf;

    public function __construct($nome,$cpf){
        $this->nome = $nome;
        $this->cpf = $cpf;
        echo "executnado cosntrutor pessoas".PHP_EOL;
    }
}

class trabalhador extends pessoa{
    private string $setor;

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

$trabalhador = new trabalhador('Secretário', 'Vincius', '123456789');

var_dump($trabalhador);

//resultado 

executnado cosntrutor pessoas

object(trabalhador)#1 (3) {
  [ "setor":"trabalhador":private]=>  string(11) "Secretário"
  ["nome":"pessoa":private]=>  string(7) "Vincius"
  ["cpf":"pessoa":private]=>  string(9) "123456789"
}

Agora o construtor foi inicializado

Humm legal, mas o construtor da classe pai tambem pode ser chamado automaticamente se a classe filha nao implementar um nosntrutor né??

solução!

Exatamente Tiago, você tem razão, tinha me esquecido desta possibilidade.

<?php

class pessoa{
    private string $nome;
    private string $cpf;

    public function __construct($nome,$cpf){
        $this->nome = $nome;
        $this->cpf = $cpf;
        echo "executnado cosntrutor pessoas".PHP_EOL;
    }
}

class trabalhador extends pessoa{
    private string $setor;
}

$trabalhador = new trabalhador('Vincius', '123456789');

var_dump($trabalhador);

//resutlado

executnado cosntrutor pessoas

object(trabalhador)#1 (3) {
  [ "setor":"trabalhador":private]=>  uninitialized(string)
  [ "nome":"pessoa":private]=>  string(7) "Vincius"
  [ "cpf":"pessoa":private]=>  string(9) "123456789"
}