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

// 1. Clase Base de Notificación
abstract class CanalNotificacion
{
    abstract public function enviar(string $destinatario, string $mensaje): bool;
}

// 2. Implementaciones Especializadas
final class CanalEmail extends CanalNotificacion
{
    public function enviar(string $destinatario, string $mensaje): bool
    {
        echo "<p style='color:#0284c7;'>📧 <strong>Email enviado a [{$destinatario}]:</strong> {$mensaje}</p>";
        return true;
    }
}

final class CanalSms extends CanalNotificacion
{
    public function enviar(string $destinatario, string $mensaje): bool
    {
        echo "<p style='color:#10b981;'>📱 <strong>SMS despachado a [{$destinatario}]:</strong> {$mensaje}</p>";
        return true;
    }
}

final class CanalWhatsApp extends CanalNotificacion
{
    public function enviar(string $destinatario, string $mensaje): bool
    {
        echo "<p style='color:#16a34a;'>💬 <strong>WhatsApp enviado a [{$destinatario}]:</strong> {$mensaje}</p>";
        return true;
    }
}

// 3. Servicio de Negocio Polimórfico
final class ServicioAlertas
{
    // Acepta CUALQUIER objeto que herede de CanalNotificacion
    public function dispararAlerta(CanalNotificacion $canal, string $destino, string $texto): void
    {
        // Despacho dinámico: PHP sabe a qué enviar() llamar según la instancia recibida
        $canal->enviar($destino, $texto);
    }
}

// ==========================================
// EJECUCIÓN POLIMÓRFICA EN BUCLE
// ==========================================
$servicio = new ServicioAlertas();

// Colección de canales heterogéneos
$canales = [
    ['canal' => new CanalEmail(),    'destino' => '[email protected]', 'msg' => 'Tu compra ha sido confirmada.'],
    ['canal' => new CanalSms(),      'destino' => '+573001234567',        'msg' => 'Tu código de verificación es 849201.'],
    ['canal' => new CanalWhatsApp(), 'destino' => '+573109876543',        'msg' => 'Tu pedido va en camino a tu domicilio.']
];

echo "<h2>Despacho Polimórfico de Alertas:</h2>";
foreach ($canales as $item) {
    $servicio->dispararAlerta($item['canal'], $item['destino'], $item['msg']);
}
Haz clic para editar este código
Vista Previa
Servidor PHP 8.3