Listo (Ctrl + Enter para ejecutar) Bootcamp Fullstack »
ejemplo.php
Tab = 4 espacios
1
<?php
declare(strict_types=1);

// 1. Clase Abstracta: Plantilla Base
abstract class FiguraGeometrica
{
    public function __construct(
        protected string $color
    ) {}

    // Método concreto compartido: Todas las figuras tienen color
    public function getColor(): string
    {
        return $this->color;
    }

    // Métodos abstractos obligatorios: Cada figura tiene su propia fórmula matemática
    abstract public function calcularArea(): float;
    abstract public function getNombre(): string;

    // Método concreto que utiliza los métodos abstractos (Template Method)
    public function imprimirFicha(): void
    {
        $area = number_format($this->calcularArea(), 2);
        echo "<div style='font-family:system-ui; border-left:4px solid {$this->color}; background:#f8fafc; padding:12px; margin-bottom:10px; border-radius:4px;'>";
        echo "<strong>{$this->getNombre()}</strong> | Color: <span style='color:{$this->color}; font-weight:bold;'>{$this->color}</span> | Área: <strong>{$area} cm²</strong>";
        echo "</div>";
    }
}

// 2. Subclase Concreta: Círculo
final class Circulo extends FiguraGeometrica
{
    public function __construct(
        string $color,
        private float $radio
    ) {
        parent::__construct($color);
    }

    public function getNombre(): string
    {
        return "Círculo (Radio: {$this->radio} cm)";
    }

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

// 3. Subclase Concreta: Rectángulo
final class Rectangulo extends FiguraGeometrica
{
    public function __construct(
        string $color,
        private float $ancho,
        private float $alto
    ) {
        parent::__construct($color);
    }

    public function getNombre(): string
    {
        return "Rectángulo ({$this->ancho}x{$this->alto} cm)";
    }

    public function calcularArea(): float
    {
        return $this->ancho * $this->alto;
    }
}

// ==========================================
// PRUEBA EN EL SANDBOX
// ==========================================
// $error = new FiguraGeometrica("#000"); // ❌ Esto causaría Fatal Error

$figuras = [
    new Circulo("#0284c7", 5.0),
    new Rectangulo("#10b981", 10.0, 4.0),
    new Circulo("#e11d48", 2.5),
];

echo "<h2>Fichas de Figuras Geométricas:</h2>";
foreach ($figuras as $figura) {
    $figura->imprimirFicha();
}
Haz clic para editar este código
Vista Previa
Servidor PHP 8.3