Ejemplo 5: Sistema de Semáforo

Estructuras condicionales elseif en PHP

Descargar archivo semáforo

🎯 Demo en Vivo

Simulador de Semáforo

Color: Verde
¡Puedes pasar!

¡Cambia el color del semáforo!

Cambio rápido:

Modo automático:

El semáforo cambiará automáticamente cada 2 segundos

📖 Explicación del Código

Código PHP Completo

<?php
$color = "verde";

if ($color == "verde") {
    echo "¡Puedes pasar!";
} elseif ($color == "amarillo") {
    echo "¡Precaución!";
} elseif ($color == "rojo") {
    echo "¡Alto! Espera...";
} else {
    echo "Color no válido";
}
?>

📝 Línea 1: Declaración de variable

$color = "verde";

¿Qué hace? Crea una variable string que almacena el color actual del semáforo.

¿Por qué se hace así? Los colores son texto, por lo que se asignan entre comillas. Usamos minúsculas para consistencia.

💡 Concepto: Comparación de strings

En PHP, los strings se comparan con == o ===. Es case-sensitive, por eso usamos strtolower() para normalizar.

📝 Líneas 3-11: Estructura if-elseif-else

if ($color == "verde") {
echo "¡Puedes pasar!";
} elseif ($color == "amarillo") {
echo "¡Precaución!";
} elseif ($color == "rojo") {
echo "¡Alto! Espera...";
} else {
echo "Color no válido";
}

¿Qué hace? Evalúa múltiples condiciones en secuencia hasta encontrar una verdadera.

¿Por qué se hace así? elseif permite manejar múltiples casos específicos antes del caso por defecto.

💡 Concepto: Flujo de elseif

PHP evalúa las condiciones en orden:
1. Si la primera es TRUE → ejecuta su bloque
2. Si es FALSE → pasa a la siguiente condición
3. Si ninguna es TRUE → ejecuta el bloque else

📝 Diferencias con switch

Con elseif
if ($color == "verde") {
    // código verde
} elseif ($color == "amarillo") {
    // código amarillo
} else {
    // código por defecto
}
Con switch
switch ($color) {
    case "verde":
        // código verde
        break;
    case "amarillo":
        // código amarillo
        break;
    default:
        // código por defecto
}

elseif es mejor cuando necesitas condiciones complejas. switch es mejor para comparaciones simples de igualdad.

🔄 Estructuras de Control Múltiples

if-elseif-else

if ($cond1) {
    // código 1
} elseif ($cond2) {
    // código 2
} else {
    // código 3
}

✅ Ventajas:

  • Condiciones complejas
  • Evaluación personalizada
  • Flexibilidad total

switch-case

switch ($variable) {
    case "valor1":
        // código 1
        break;
    case "valor2":
        // código 2
        break;
    default:
        // código default
}

✅ Ventajas:

  • Más legible
  • Mejor para igualdades simples
  • Múltiples casos iguales

🎯 Casos de Uso Comunes

✅ Sistemas de Estado

Gestión de estados como: activo/inactivo/pendiente

if ($estado == "activo") {
    // usuario activo
} elseif ($estado == "inactivo") {
    // usuario inactivo
} elseif ($estado == "pendiente") {
    // usuario pendiente
}

✅ Niveles de Acceso

Control de permisos: admin/editor/usuario

if ($nivel == "admin") {
    // acceso total
} elseif ($nivel == "editor") {
    // acceso edición
} else {
    // acceso básico
}

✅ Sistemas de Puntuación

Clasificación por rangos: A/B/C/D

if ($puntos >= 90) {
    $grado = "A";
} elseif ($puntos >= 80) {
    $grado = "B";
} elseif ($puntos >= 70) {
    $grado = "C";
} else {
    $grado = "D";
}

🎯 Conceptos Clave Aprendidos

Elseif Múltiple

  • Maneja más de dos condiciones
  • Se evalúa en orden secuencial
  • Solo un bloque se ejecuta
  • Útil para categorías

Comparación de Strings

  • Case-sensitive por defecto
  • Usar strtolower() para normalizar
  • == vs === para comparación
  • Importante para validación

Default Case

  • Maneja casos inesperados
  • Proporciona robustez
  • Mejora la experiencia de usuario
  • Previene errores

💪 Ejercicio Práctico

Amplía el sistema de semáforo

Practica estos cambios para mejorar tus habilidades:

  1. Añade un color "azul" para "avanzar con precaución extrema"
  2. Implementa un sistema de semáforo para peatones (verde/rojo)
  3. Crea un semáforo inteligente que sugiera acción según la hora
  4. Convierte el código a estructura switch y compara
  5. Añade validación para colores en mayúsculas y minúsculas

Solución 1: Color azul añadido

<?php
if ($color == "verde") {
    echo "¡Puedes pasar!";
} elseif ($color == "amarillo") {
    echo "¡Precaución!";
} elseif ($color == "rojo") {
    echo "¡Alto! Espera...";
} elseif ($color == "azul") {
    echo "Avanzar con precaución extrema";
} else {
    echo "Color no válido";
}
?>

Solución 2: Semáforo peatonal

<?php
if ($color == "verde") {
    echo "🟢 Peatón: Cruza ahora";
} elseif ($color == "rojo") {
    echo "🔴 Peatón: Espera para cruzar";
} else {
    echo "Color no válido para peatones";
}
?>

Solución 3: Semáforo inteligente

<?php
$hora = date('H');
if ($hora >= 6 && $hora <= 22) {
    // Horario normal
    if ($color == "verde") {
        echo "¡Puedes pasar!";
    } elseif ($color == "rojo") {
        echo "¡Alto! Espera...";
    }
} else {
    // Horario nocturno
    if ($color == "verde") {
        echo "¡Puedes pasar con precaución!";
    } elseif ($color == "rojo") {
        echo "¡Alto! Semáforo en modo nocturno";
    }
}
?>

Solución 4: Con switch

<?php
switch ($color) {
    case "verde":
        echo "¡Puedes pasar!";
        break;
    case "amarillo":
        echo "¡Precaución!";
        break;
    case "rojo":
        echo "¡Alto! Espera...";
        break;
    default:
        echo "Color no válido";
}
?>

Solución 5: Validación case-insensitive

<?php
$color = strtolower($color); // Normaliza a minúsculas

if ($color == "verde") {
    echo "¡Puedes pasar!";
} elseif ($color == "amarillo") {
    echo "¡Precaución!";
} elseif ($color == "rojo") {
    echo "¡Alto! Espera...";
} else {
    echo "Color no válido";
}
?>