Menu
Coddy logo textTech

Herança Básica

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy. Lição 21 de 91.

A herança permite que uma classe adquira propriedades e métodos de outra classe. Em vez de reescrever o mesmo código, você pode criar uma classe base com funcionalidades compartilhadas e fazer com que outras classes herdem dela.

A classe da qual se herda é chamada de classe pai (ou classe base), e a classe que herda é chamada de classe filha. Você usa a palavra-chave extends para estabelecer essa relação:

<?php
class Animal {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
    
    public function speak() {
        return "$this->name makes a sound";
    }
}

class Dog extends Animal {
    public function fetch() {
        return "$this->name fetches the ball";
    }
}

$dog = new Dog("Buddy");
echo $dog->speak() . "\n";
echo $dog->fetch();

Saída:

Buddy makes a sound
Buddy fetches the ball

A classe Dog tem acesso automaticamente à propriedade $name, ao construtor e ao método speak() de Animal. Ela também define seu próprio método fetch(), que apenas cães têm.

Isso cria uma hierarquia clara: todo cachorro é um animal, então faz sentido Dog herdar de Animal. A classe filha pode usar tudo da classe pai e ainda adicionar seu próprio comportamento especializado.

Ponto-chave: A herança promove a reutilização de código e estabelece relações lógicas entre classes. A classe filha herda todos os membros públicos e protegidos da classe pai, reduzindo a duplicação e facilitando a manutenção do seu código.

challenge icon

Desafio

Fácil

Vamos criar um sistema de hierarquia de veículos que demonstra como a herança permite que classes filhas compartilhem funcionalidades de uma classe pai enquanto adicionam seus próprios comportamentos especializados.

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

  • Vehicle.php: Defina uma classe Vehicle que servirá como classe pai para todos os veículos. Ela deve ter uma propriedade pública $brand e um construtor que aceite e defina a marca. Inclua um método start() que retorne "[brand] is starting" e um método stop() que retorne "[brand] is stopping".
  • Motorcycle.php: Defina uma classe Motorcycle que estenda Vehicle. Inclua o arquivo Vehicle no início. A classe Motorcycle não precisa de seu próprio construtor, pois herdará o construtor da classe pai. Adicione um método wheelie() que retorne "[brand] is doing a wheelie!". Esse é um comportamento exclusivo das motocicletas.
  • main.php: Inclua o arquivo Motorcycle (que já inclui Vehicle). Você receberá uma entrada: a marca da motocicleta. Crie um objeto Motorcycle com essa marca. Imprima o resultado da chamada de start(), depois wheelie() e, por fim, stop(), cada um em sua própria linha.

Observe como a classe Motorcycle herda automaticamente a propriedade $brand, o construtor e os métodos start() e stop() de Vehicle. A classe filha só precisa definir o que a torna única — neste caso, a capacidade de empinar. Esse é o poder da herança: escrever a funcionalidade comum uma única vez na classe pai e permitir que as classes filhas a reutilizem enquanto adicionam suas próprias especializações.

Experimente você mesmo

<?php
// Inclua a classe Motorcycle (que já inclui Vehicle)
require_once 'Motorcycle.php';

// Ler a entrada
$brand = trim(fgets(STDIN));

// TODO: Crie um objeto Motorcycle com a marca

// TODO: Imprima o resultado de start()

// TODO: Imprima o resultado de wheelie()

// TODO: Imprima o resultado de stop()
?>
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

Pratique por conta própria: Compilador de PHP online