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

// 1. [S] - Entidad de Negocio Pura (Solo gestiona los datos de la factura)
final class Factura
{
    public function __construct(
        public readonly string $codigo,
        public readonly string $cliente,
        public readonly float $subtotal,
        public readonly float $tasaIva = 0.19
    ) {}

    public function calcularTotal(): float
    {
        return round($this->subtotal * (1 + $this->tasaIva), 2);
    }
}

// 2. [I & D] - Interfaces Segregadas de Notificación y Persistencia
interface NotificadorFacturaInterface
{
    public function notificar(Factura $factura): void;
}

interface RepositorioFacturaInterface
{
    public function guardar(Factura $factura): bool;
}

// 3. [O] - Implementaciones Abiertas para Extender
final class EmailNotificador implements NotificadorFacturaInterface
{
    public function notificar(Factura $factura): void
    {
        echo "<p style='color:#0284c7;'>📧 Notificación enviada al cliente: <em>{$factura->cliente}</em> por la factura #{$factura->codigo}.</p>";
    }
}

final class BaseDatosRepositorio implements RepositorioFacturaInterface
{
    public function guardar(Factura $factura): bool
    {
        echo "<p style='color:#10b981;'>💾 Factura #{$factura->codigo} almacenada en tabla `facturas` con total de $" . number_format($factura->calcularTotal(), 2) . "</p>";
        return true;
    }
}

// 4. [D] - Servicio de Alto Nivel con Inversión de Dependencias
final class ProcesadorFacturas
{
    public function __construct(
        private RepositorioFacturaInterface $repo,
        private NotificadorFacturaInterface $notificador
    ) {}

    public function emitir(Factura $factura): void
    {
        $this->repo->guardar($factura);
        $this->notificador->notificar($factura);
        echo "<div style='background:#f0fdf4; border:1px solid #bbf7d0; padding:10px; border-radius:6px; color:#166534; font-weight:bold;'>✔ Ciclo de emisión SOLID completado exitosamente.</div><hr>";
    }
}

// ==========================================
// PRUEBA EN EL SANDBOX
// ==========================================
echo "<h2>Procesamiento de Facturación Arquitectura SOLID:</h2>";

// Inyección de componentes modulares
$procesador = new ProcesadorFacturas(
    new BaseDatosRepositorio(),
    new EmailNotificador()
);

$factura1 = new Factura("FAC-2026-001", "Acme Corporation", 1200.00);
$factura2 = new Factura("FAC-2026-002", "Kilopolis Tech Hub", 450.00);

$procesador->emitir($factura1);
$procesador->emitir($factura2);
Haz clic para editar este código
Vista Previa
Servidor PHP 8.3