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