Ejemplo 5: Sistema de Semáforo
Estructuras condicionales elseif en PHP
Descargar archivo semáforo🎯 Demo en Vivo
Simulador de Semáforo
¡Cambia el color del semáforo!
Cambio rápido:
Modo automático:
📖 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:
- Añade un color "azul" para "avanzar con precaución extrema"
- Implementa un sistema de semáforo para peatones (verde/rojo)
- Crea un semáforo inteligente que sugiera acción según la hora
- Convierte el código a estructura switch y compara
- 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";
}
?>