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

// 1. Contrato: Interfaz de Pago
interface PasarelaPagoInterface
{
    public function cobrar(float $monto): bool;
    public function getNombre(): string;
}

// 2. Implementación A: Stripe
final class StripePasarela implements PasarelaPagoInterface
{
    public function getNombre(): string
    {
        return "Stripe Credit Card Gateway";
    }

    public function cobrar(float $monto): bool
    {
        echo "<p style='color:#6366f1;'>💳 Conectando con Stripe API... Cobro de $" . number_format($monto, 2) . " procesado con token cifrado.</p>";
        return true;
    }
}

// 3. Implementación B: PayPal
final class PayPalPasarela implements PasarelaPagoInterface
{
    public function getNombre(): string
    {
        return "PayPal Express Checkout";
    }

    public function cobrar(float $monto): bool
    {
        echo "<p style='color:#0284c7;'>🅿️ Redirigiendo a PayPal Orders... Autorización de $" . number_format($monto, 2) . " aprobada.</p>";
        return true;
    }
}

// 4. Implementación C: Mock Fake para Pruebas Unitarias de Clase
final class FakeMockPasarela implements PasarelaPagoInterface
{
    public function getNombre(): string
    {
        return "Mock Testing Gateway (Sin Dinero Real)";
    }

    public function cobrar(float $monto): bool
    {
        echo "<p style='color:#10b981;'>🧪 Simulación de cobro exitoso para tests unitarios: $" . number_format($monto, 2) . "</p>";
        return true;
    }
}

// 5. Servicio de Facturación Desacoplado (Inversión de Dependencias)
final class CheckoutService
{
    // Solo depende de la INTERFAZ, no de una empresa en particular
    public function __construct(
        private PasarelaPagoInterface $pasarela
    ) {}

    public function procesarPedido(string $cliente, float $total): void
    {
        echo "<h4>Procesando pedido para {$cliente} mediante: <em>{$this->pasarela->getNombre()}</em></h4>";
        $exito = $this->pasarela->cobrar($total);
        if ($exito) {
            echo "<p style='font-weight:bold; color:#16a34a;'> Pedido confirmado y factura generada con éxito.</p><hr>";
        }
    }
}

// ==========================================
// PRUEBA EN EL SANDBOX
// ==========================================
// Caso 1: Cliente paga con Stripe
$checkoutStripe = new CheckoutService(new StripePasarela());
$checkoutStripe->procesarPedido("Sofía Morales", 149.99);

// Caso 2: Cliente prefiere PayPal
$checkoutPayPal = new CheckoutService(new PayPalPasarela());
$checkoutPayPal->procesarPedido("David Peña", 75.50);

// Caso 3: Pruebas automatizadas en desarrollo
$checkoutTest = new CheckoutService(new FakeMockPasarela());
$checkoutTest->procesarPedido("Usuario Pruebas", 10.00);
Haz clic para editar este código
Vista Previa
Servidor PHP 8.3