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 funcionalidade compartilhada 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 possuem.

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

Ponto Chave: A herança promove a reutilização de código e estabelece relacionamentos lógicos entre classes. A classe filha herda todos os membros públicos e protegidos da classe pai, reduzindo a duplicação e tornando seu código mais fácil de manter.

challenge icon

Desafio

Fácil

Vamos construir um sistema de hierarquia de veículos que demonstra como a herança permite que classes filhas compartilhem funcionalidades de uma classe pai, ao mesmo tempo em que adicionam seus próprios comportamentos especializados.

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

  • Vehicle.php — Defina uma classe Vehicle que sirva como 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 topo. A classe Motorcycle não precisa de seu próprio construtor, pois herdará o construtor do pai. Adicione um método wheelie() que retorne "[brand] is doing a wheelie!" — este é um comportamento exclusivo de 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, em seguida, 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 fazer um wheelie. Este é o poder da herança: escreva a funcionalidade comum uma vez no pai e deixe que os filhos a reutilizem enquanto adicionam suas próprias especializações.

Folha de consulta

A herança permite que uma classe adquira propriedades e métodos de outra classe usando a palavra-chave extends. A classe da qual se herda é chamada de classe pai (ou classe base), e a classe que herda é chamada de classe filha.

<?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(); // Buddy makes a sound
echo $dog->fetch(); // Buddy fetches the ball

A classe filha herda todos os membros públicos e protegidos do pai, incluindo propriedades, construtores e métodos. A filha também pode adicionar seus próprios métodos e propriedades especializados.

A herança promove a reutilização de código e estabelece relacionamentos lógicos entre as classes, reduzindo a duplicação e tornando o código mais fácil de manter.

Experimente você mesmo

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

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

// TODO: Criar um objeto Motorcycle com a marca

// TODO: Imprimir o resultado de start()

// TODO: Imprimir o resultado de wheelie()

// TODO: Imprimir 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