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
extendscria 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.abstractdefine classes que não podem ser instanciadas e métodos que devem ser implementados pelas filhas.finalimpede a extensão de uma classe ou a sobrescrita de um método, protegendo regras de negócio.
<?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;
}