Da trilha de PHP Este conceito ainda não saiu como card do dia. ir para o card de hoje

PHP POO Intermediário

Herança e abstract

Em PHP, a herança permite que uma classe (filha) reutilize e especialize o comportamento de outra (pai). Usamos extends para herdar, e parent:: para acessar métodos ou construtores da classe pai. Classes abstract servem como modelos: não podem ser instanciadas e podem definir métodos abstratos que as filhas são obrigadas a implementar. Já final impede que uma classe seja estendida ou que um método seja sobrescrito, garantindo que um comportamento específico não seja alterado. Neste card, você vai praticar esses quatro pilares da orientação a objetos em PHP.

Pontos-chave

  • extends cria uma relação de herança: a classe filha herda propriedades e métodos públicos e protegidos.
  • parent:: chama o construtor ou métodos da classe pai, útil para reaproveitar código.
  • abstract define classes que não podem ser instanciadas e métodos que devem ser implementados pelas filhas.
  • final impede a extensão de uma classe ou a sobrescrita de um método, protegendo regras de negócio.
inheritance_abstract.php
<?php
// Classe abstrata: não pode ser instanciada diretamente
declare(strict_types=1);

abstract class Forma
{
    public function __construct(protected string $nome)
    {
    }

    // Método abstrato: obriga as filhas a implementarem
    abstract public function area(): float;

    public function descricao(): string
    {
        return "Forma: {$this->nome} | Área: " . number_format($this->area(), 2);
    }
}

class Retangulo extends Forma
{
    public function __construct(
        float $largura,
        float $altura
    ) {
        parent::__construct('Retângulo'); // chama construtor do pai
        $this->largura = $largura;
        $this->altura = $altura;
    }

    public function area(): float
    {
        return $this->largura * $this->altura;
    }
}

class Circulo extends Forma
{
    public function __construct(private float $raio)
    {
        parent::__construct('Círculo');
    }

    public function area(): float
    {
        return M_PI * $this->raio ** 2;
    }
}

$formas = [new Retangulo(3, 4), new Circulo(2)];
foreach ($formas as $forma) {
    echo $forma->descricao() . PHP_EOL;
}

Exercícios

  1. 1
    Fácil

    Conta bancária com herança

    Crie uma classe Conta com o método sacar(float $valor): void que apenas exibe uma mensagem. Depois, crie ContaCorrente extends Conta que sobrescreve sacar para exibir a mensagem com uma taxa de 1% sobre o valor. Instancie e chame sacar(100).

    Resolver
  2. 2
    Médio

    Formas geométricas com abstract

    Crie uma classe abstrata Forma com o método abstrato area(): float e um método concreto descricao(): string que retorna "Área: X". Implemente Retangulo e Circulo que estendem Forma. Instancie cada uma e exiba a descrição.

    Resolver
  3. 3
    Desafio

    Sistema de notificações com final e abstract

    Crie uma classe abstrata Notificador com o método abstrato enviar(string $mensagem): void e um método final registrarLog(string $mensagem): void que imprime "[LOG] $mensagem". Implemente EmailNotificador e SmsNotificador que estendem Notificador. Cada um deve chamar registrarLog antes de enviar. Instancie ambos e envie uma mensagem.

    Resolver

Continue estudando