Menu
Coddy logo textTech

A Palavra-chave parent::

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy — lição 22 de 91.

Quando uma classe filha herda de uma classe pai, às vezes você precisa acessar os métodos ou propriedades da classe pai diretamente. A palavra-chave parent:: permite que você chame a implementação da classe pai de dentro da classe filha.

Isso é especialmente útil em construtores quando o filho precisa inicializar as propriedades do pai enquanto também configura as suas próprias:

<?php
class Animal {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

class Dog extends Animal {
    public $breed;
    
    public function __construct($name, $breed) {
        parent::__construct($name);
        $this->breed = $breed;
    }
    
    public function describe() {
        return "$this->name is a $this->breed";
    }
}

$dog = new Dog("Max", "Labrador");
echo $dog->describe();

Saída:

Max is a Labrador

Ao chamar parent::__construct($name), a classe filha reutiliza a lógica de inicialização da classe pai em vez de duplicá-la. Sem essa chamada, a propriedade $name nunca seria definida.

Você pode usar parent:: para chamar qualquer método pai, não apenas construtores. Isso se torna particularmente importante quando você deseja estender o comportamento de um método em vez de substituí-lo completamente.

Ponto Chave: A palavra-chave parent:: fornece uma maneira de acessar a implementação da classe pai. É essencial para o encadeamento adequado de construtores e para construir sobre a funcionalidade herdada em vez de reescrevê-la.

challenge icon

Desafio

Fácil

Vamos construir um sistema de catálogo de produtos que demonstra como as classes filhas podem estender a funcionalidade dos pais usando a palavra-chave parent:: para encadear construtores corretamente e aprimorar métodos herdados.

Você organizará seu código em três arquivos:

  • Product.php — Defina uma classe Product que sirva como base para todos os produtos. Ela deve ter as propriedades públicas $name e $price. O construtor aceita um nome e um preço, definindo ambas as propriedades. Inclua um método getDetails() que retorna "[name]: $[price]".
  • ElectronicProduct.php — Defina uma classe ElectronicProduct que estende Product. Inclua o arquivo Product no topo. Esta classe adiciona uma propriedade $warranty (em meses). O construtor deve aceitar nome, preço e garantia — use parent::__construct() para inicializar o nome e o preço através do pai e, em seguida, defina a garantia você mesmo. Crie um método getDetails() que se baseia na implementação do pai: chame parent::getDetails() e anexe " (Warranty: [warranty] months)" a ele.
  • main.php — Inclua o arquivo ElectronicProduct. Você receberá três entradas: o nome do produto, o preço (como uma string para converter em float) e o período de garantia (como uma string para converter em um inteiro). Crie um ElectronicProduct com esses valores e imprima o resultado da chamada de getDetails().

Este desafio mostra o real poder do parent:: — não apenas para o encadeamento de construtores, mas também para estender o comportamento dos métodos. Seu ElectronicProduct reutiliza a lógica de formatação do pai e adiciona seus próprios detalhes por cima, evitando a duplicação de código e criando uma saída mais rica.

Folha de consulta

A palavra-chave parent:: permite que uma classe filha acesse métodos e propriedades de sua classe pai.

Use parent::__construct() para chamar o construtor do pai a partir da classe filha:

<?php
class Animal {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

class Dog extends Animal {
    public $breed;
    
    public function __construct($name, $breed) {
        parent::__construct($name);
        $this->breed = $breed;
    }
}

Você também pode usar parent:: para chamar qualquer método pai e estender seu comportamento:

<?php
class Animal {
    public function describe() {
        return "This is an animal";
    }
}

class Dog extends Animal {
    public function describe() {
        return parent::describe() . " and it's a dog";
    }
}

Essa abordagem permite que as classes filhas reutilizem a lógica do pai em vez de duplicar código, possibilitando o encadeamento adequado de construtores e a extensão de métodos.

Experimente você mesmo

<?php
require_once 'ElectronicProduct.php';

// Ler entradas
$name = trim(fgets(STDIN));
$price = floatval(trim(fgets(STDIN)));
$warranty = intval(trim(fgets(STDIN)));

// TODO: Criar um ElectronicProduct com os valores de entrada
// e imprimir o resultado da chamada de getDetails()

?>
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos