Eu nao entendi como o construct() de fato funciona. Alguem poderia me explicar?
Eu nao entendi como o construct() de fato funciona. Alguem poderia me explicar?
Oii, Paulo!
Essa é uma dúvida muito comum quando estamos começando na Orientada a Objetos, pois o construtor parece um pouco "mágico" por não precisarmos chamá-lo manualmente como fazemos com outros métodos.
Pra facilitar a compreensão, imagine que a Classe é uma planta de uma casa e o Objeto é a casa construída. O construtor é o momento em que os pedreiros recebem os materiais (dados) para levantar as paredes. Sem esses materiais logo no início, a casa ficaria incompleta ou "inconsistente".
O que é o método construct?
O construtor é um método especial que o PHP executa automaticamente no exato momento em que você usa a palavra-chave new.
1. Garantia de integridade
Sem um construtor, você poderia criar um filme "vazio":
$meuFilme = new Filme(); // o filme existe, mas não tem nome nem ano.
Com o construtor, você obriga que o objeto nasça com as informações necessárias:
$meuFilme = new Filme("Thor: Ragnarok", 2017, "Ação");
2. De onde vem os dados?
Quando você passa valores entre os parênteses de new Filme(...), o PHP os envia diretamente para a função public function __construct. Lá dentro, o $this->nome = $nome pega o que você enviou e guarda dentro da "caixinha" (propriedade) do objeto.
Evolução da sintaxe (promoção de atributos):
No PHP moderno (a partir da versão 8.0), existe uma forma simplificada que você viu na aula. Veja a diferença:
private ou public dentro dos parênteses do construtor, o PHP faz tudo isso de uma vez só.public function __construct(
private string $nome, // 1. Cria a propriedade privada
private int $anoLancamento // 2. Já guarda o valor recebido nela
) {
// 3. O corpo pode até ficar vazio ou inicializar outras coisas, como $this->notas = [];
}
Por que usar?
Pra resumir: o construtor é a "certidão de nascimento" do objeto, onde você já define quem ele é no momento em que ele passa a existir na memória do computador.
Espero ter te ajudado.