Diferencia entre revisiones de «Plantilla:ManuelRomero/PHP/EstructurasControl»
(7 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 113: | Línea 113: | ||
=== Selección con `if` === | === Selección con `if` === | ||
*La estructura de control ''if'' permite evaluar una ''expresión booleana'' (una condición que puede ser verdadera o falsa). | *La estructura de control ''if'' permite evaluar una ''expresión booleana'' (una condición que puede ser verdadera o falsa). | ||
− | * | + | *Siempre la '''expresión booleana''' va entre paréntesis |
+ | {{MRM_Puntos clave|title=flujo de ejecución| | ||
+ | ; Si la expresión booleana es '''true''' ejecutará un bloque de sentencias | ||
+ | ; Si no, o lo omitirá, o ejecutará otro si se especifica. | ||
+ | }} | ||
+ | |||
+ | <gallery> | ||
+ | [[Archivo:estructura_if.png|center|400px]] | ||
+ | [[Archivo:estructura_if_else.png|center|500px]] | ||
+ | |||
+ | </gallery> | ||
+ | |||
+ | {| class="wikitable" style="text-align: center;" | ||
+ | |- | ||
+ | ! Estructura IF | ||
+ | ! Estructura IF ELSE | ||
+ | |- | ||
+ | |[[Archivo:estructura_if.png|center|400px]] | ||
+ | |[[Archivo:estructura_if_else.png|center|500px]] | ||
+ | |} | ||
==== Sintaxis Básica ==== | ==== Sintaxis Básica ==== | ||
Línea 157: | Línea 176: | ||
{{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/ejercicio13}} | {{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/ejercicio13}} | ||
− | ==== If gráficamente ==== | + | ==== If gráficamente (ordinagrama) ==== |
[[Archivo:estructura_if.png|center]] | [[Archivo:estructura_if.png|center]] | ||
La imagen muestra el flujo de ejecución: si la '''expresión booleana'' es '''true''', se ejecutan las sentencias dentro del bloque `if`; si es '''false''', el flujo continúa después del bloque. | La imagen muestra el flujo de ejecución: si la '''expresión booleana'' es '''true''', se ejecutan las sentencias dentro del bloque `if`; si es '''false''', el flujo continúa después del bloque. | ||
Línea 186: | Línea 205: | ||
*Si '''$edad''' es 18 o más, se imprime "Eres mayor de edad". Si '''$edad''' es menor que 18, se imprime "Eres menor de edad". | *Si '''$edad''' es 18 o más, se imprime "Eres mayor de edad". Si '''$edad''' es menor que 18, se imprime "Eres menor de edad". | ||
− | ==== | + | ==== if...else gráfico (Ordinograma) ==== |
[[Archivo:estructura_if_else.png|center|500px]] | [[Archivo:estructura_if_else.png|center|500px]] | ||
La imagen muestra que si la condición es **true**, se ejecuta el bloque `if`; si es **false**, se ejecuta el bloque `else`. | La imagen muestra que si la condición es **true**, se ejecuta el bloque `if`; si es **false**, se ejecuta el bloque `else`. | ||
Línea 263: | Línea 282: | ||
// Escribe el código del ejercicio aquí | // Escribe el código del ejercicio aquí | ||
+ | </source> | ||
+ | === Operador Ternario === | ||
+ | *El '''operador ternario''' es una forma más compacta de expresar una estructura '''if-else''' en una única línea, ideal cuando se desea evaluar una condición y devolver un valor en función del resultado. | ||
+ | *Esta expresión retorna un valor según la condición especificada. | ||
+ | |||
+ | <source lang=php> | ||
+ | (expresión_booleana) ? valor_si_true : valor_si_false; | ||
+ | </source> | ||
+ | |||
+ | *El valor que retorna es el resultado de la '''expresión''' que corresponda según el valor de la condición. Esta expresión es equivalente a: | ||
+ | |||
+ | <source lang=php> | ||
+ | if (expresión_booleana) | ||
+ | valor_si_true; | ||
+ | else | ||
+ | valor_si_false; | ||
+ | </source> | ||
+ | |||
+ | *Usar el operador ternario ayuda a escribir el código de forma más compacta y clara, especialmente en expresiones sencillas. | ||
+ | |||
+ | ==== Ejemplo ==== | ||
+ | <br /> | ||
+ | {{MRM_Actividad|Determinar si un número aleatorio es par o impar}} | ||
+ | |||
+ | {{Plegable|hide|Operador ternario| | ||
+ | Programa para par o impar con operador ternario | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $num = rand(1, 100); | ||
+ | echo ($num % 2 == 0) ? "$num es par" : "$num es impar"; | ||
+ | ?> | ||
+ | </source> | ||
+ | }} | ||
+ | |||
+ | {{Plegable|hide|Estructura if-else| | ||
+ | Programa para par o impar con estructura if-else | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $num = rand(1, 100); | ||
+ | if ($num % 2 == 0) { | ||
+ | echo "$num es par"; | ||
+ | } else { | ||
+ | echo "$num es impar"; | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | }} | ||
+ | |||
+ | <br /> | ||
+ | *Este '''operador ternario''' se utiliza mucho en programación, y conviene entenderlo y habituarse a su uso para escribir código más conciso y claro. | ||
+ | |||
+ | === Selección con `switch` === | ||
+ | *El operador '''switch''' es un selector múltiple que permite evaluar el valor de una variable o expresión y ejecutar el bloque de código correspondiente al primer caso que coincida. | ||
+ | *En PHP, la sentencia `case` puede albergar valores de cualquier tipo simple (números, cadenas, etc.), no está limitada a enteros como en otros lenguajes. | ||
+ | *Esta estructura es útil cuando tenemos múltiples casos excluyentes y queremos evitar múltiples `if-else`. | ||
+ | |||
+ | ==== Sintaxis ==== | ||
+ | La sintaxis básica de un `switch` en PHP es: | ||
+ | <source lang=php> | ||
+ | switch ($valor) { | ||
+ | case "valor1": | ||
+ | // acciones | ||
+ | break; | ||
+ | case "valor2": | ||
+ | // acciones | ||
+ | break; | ||
+ | case "valorn": | ||
+ | // acciones | ||
+ | break; | ||
+ | default: | ||
+ | // acciones si no hay coincidencia | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | ==== Notas Importantes ==== | ||
+ | *El `switch` busca la primera coincidencia de `$valor` con los valores de los casos (`case`) y ejecuta todas las instrucciones posteriores hasta encontrar un `break`. | ||
+ | *Si no se coloca un `break`, continuará ejecutando los casos siguientes, incluso si no coinciden. | ||
+ | |||
+ | ==== Ejemplo Básico ==== | ||
+ | {{MRM_Ejemplo|Title=Ejemplo: Identificar un Nombre| | ||
+ | *Escribe un programa que evalúe si una variable `$nombre` es "María", "Pedro", o cualquier otro nombre. | ||
+ | |||
+ | {{Plegable|hide|Posible Solución| | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $nombre = "Pedro"; | ||
+ | |||
+ | switch ($nombre) { | ||
+ | case "María": | ||
+ | echo "Eres una chica"; | ||
+ | break; | ||
+ | case "Pedro": | ||
+ | echo "Eres un chico"; | ||
+ | break; | ||
+ | default: | ||
+ | echo "No sé qué nombre tienes"; | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | }} | ||
+ | }} | ||
+ | |||
+ | ==== Ejemplo con Rango de Valores ==== | ||
+ | *En algunos casos, queremos evaluar rangos de valores (por ejemplo, edades, calificaciones). En PHP, esto se logra usando expresiones booleanas dentro de los `case` y configurando el `switch` para evaluar `true`. | ||
+ | |||
+ | {{MRM_Ejemplo|Title=Ejemplo: Nivel de Madurez| | ||
+ | *Generar una edad aleatoria entre 0 y 110 y clasificarla según el nivel de madurez: | ||
+ | |||
+ | - 0–2: Bebé | ||
+ | - 3–10: Niñez | ||
+ | - 11–17: Adolescencia | ||
+ | - 18–26: Juventud | ||
+ | - 27–59: Adultez | ||
+ | - 60–80: Experimentado | ||
+ | - Más de 80: Disfrutando la vida | ||
+ | |||
+ | {{Plegable|hide|Posible Solución| | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $edad = rand(0, 110); | ||
+ | |||
+ | switch (true) { | ||
+ | case ($edad >= 0 && $edad <= 2): | ||
+ | echo "Con $edad años: Eres un bebé"; | ||
+ | break; | ||
+ | case ($edad >= 3 && $edad <= 10): | ||
+ | echo "Con $edad años: Estás en la niñez"; | ||
+ | break; | ||
+ | case ($edad >= 11 && $edad <= 17): | ||
+ | echo "Con $edad años: Estás en la adolescencia"; | ||
+ | break; | ||
+ | case ($edad >= 18 && $edad <= 26): | ||
+ | echo "Con $edad años: Eres joven"; | ||
+ | break; | ||
+ | case ($edad >= 27 && $edad <= 59): | ||
+ | echo "Con $edad años: Eres adulto"; | ||
+ | break; | ||
+ | case ($edad >= 60 && $edad <= 80): | ||
+ | echo "Con $edad años: Eres experimentado"; | ||
+ | break; | ||
+ | default: | ||
+ | echo "Con $edad años: Disfruta la vida"; | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | }} | ||
+ | }} | ||
+ | |||
+ | ==== Casos Curiosos en PHP ==== | ||
+ | En PHP, al comparar rangos o expresiones booleanas dentro de un `case`, se recomienda configurar el `switch` para evaluar `true`. Esto evita errores de interpretación con valores como `0`. | ||
+ | |||
+ | **Ejemplo Problemático**: | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $nota = 0; | ||
+ | |||
+ | switch ($nota) { | ||
+ | case ($nota >= 0 && $nota <= 3): | ||
+ | echo "Nota deficiente"; | ||
+ | break; | ||
+ | case 4: | ||
+ | echo "Nota insuficiente"; | ||
+ | break; | ||
+ | case 5: | ||
+ | echo "Nota suficiente"; | ||
+ | break; | ||
+ | case ($nota > 6 && $nota < 9): | ||
+ | echo "Nota notable"; | ||
+ | break; | ||
+ | case ($nota >= 9): | ||
+ | echo "Nota sobresaliente"; | ||
+ | break; | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | *Si `$nota = 0`, el primer caso no se ejecuta porque PHP convierte `0` a booleano `false`, lo que genera errores lógicos. | ||
+ | |||
+ | **Solución Recomendada**: | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $nota = rand(0, 10); | ||
+ | |||
+ | switch (true) { | ||
+ | case ($nota >= 0 && $nota <= 3): | ||
+ | echo "Nota deficiente"; | ||
+ | break; | ||
+ | case $nota == 4: | ||
+ | echo "Nota insuficiente"; | ||
+ | break; | ||
+ | case $nota == 5: | ||
+ | echo "Nota suficiente"; | ||
+ | break; | ||
+ | case $nota == 6: | ||
+ | echo "Nota bien"; | ||
+ | break; | ||
+ | case ($nota >= 7 && $nota <= 8): | ||
+ | echo "Nota notable"; | ||
+ | break; | ||
+ | case ($nota >= 9): | ||
+ | echo "Nota sobresaliente"; | ||
+ | break; | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | ==== Actividad Propuesta ==== | ||
+ | *Generar un número aleatorio para el mes (entre 1 y 12) y mostrar el número de días correspondientes. Si el número no corresponde a un mes válido, informar al usuario. | ||
+ | |||
+ | {{Plegable|hide|Posible Solución| | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $mes = rand(1, 15); | ||
+ | |||
+ | switch ($mes) { | ||
+ | case 1: case 3: case 5: case 7: case 8: case 10: case 12: | ||
+ | echo "$mes es un mes de 31 días"; | ||
+ | break; | ||
+ | case 4: case 6: case 9: case 11: | ||
+ | echo "$mes es un mes de 30 días"; | ||
+ | break; | ||
+ | case 2: | ||
+ | echo "$mes es un mes de 28 o 29 días (dependiendo del año)"; | ||
+ | break; | ||
+ | default: | ||
+ | echo "$mes no es un mes válido"; | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | }} | ||
+ | }} | ||
+ | |||
+ | ===Selección con el operador match=== | ||
+ | *El operador match aparece en php en la versión 8 | ||
+ | *Es una opción depurada y para casos concretos que puede sustituir de forma más eficiente y legigle a la estructura switch-case | ||
+ | {{MRM_Puntos clave|Title=Operador match| | ||
+ | *1.- Siempre retornará un valor | ||
+ | *2.- Evaluamos una expresión, al igual que con switch-case | ||
+ | *3.- En cada una de las ramas puedo establecer varias condiciones separadas por comas, intuyendo en ello una or lógica. | ||
+ | *4.- Igual que en switch-case existe la rama default | ||
+ | *5.- Como va a ser parte de una asignación, debe de terminar en ; | ||
+ | *6.- Las comparaciones que hace son estrictas a diferenica del switch-case que hace comparaciones no estrictas | ||
+ | }} | ||
+ | *A continuación podemos ver ejemplos | ||
+ | <source lang=php> | ||
+ | $numero_mes = rand(1,15); | ||
+ | $nombre_mes = match ($numero_mes){ | ||
+ | 1=>"Enero", | ||
+ | 2=>"Febrero", | ||
+ | ..... | ||
+ | default => "Mes incorrecto" | ||
+ | }; | ||
+ | echo "El mes $numero_mes es $nombre_mes" | ||
+ | |||
+ | </source> | ||
+ | * Aquí vemos el uso de varios valores posibles en la comparación | ||
+ | <source lang=php> | ||
+ | |||
+ | ```php | ||
+ | $numero_mes = rand(1,15); | ||
+ | $numero_dias=match($mes){ | ||
+ | 1,3,5,7,8,10,12 => 31, | ||
+ | 4,6,8,11 =>30, | ||
+ | 2 => 28 | ||
+ | }; | ||
+ | echo "El mes $mes tiene $numero_dias días"; | ||
</source> | </source> |
Última revisión de 18:54 15 nov 2024
Contenido
Estructuras de Control
- Las estructuras de control determinan el flujo de ejecución de un programa
- Especifican el orden en que se ejecutarán las instrucciones.
- Existen tres tipos principales de estructuras de control:
- Secuenciales: Ejecutan las instrucciones en orden, una tras otra.
- Selectivas: Permiten elegir entre diferentes caminos según una condición.
- Repetitivas: Ejecutan un bloque de instrucciones varias veces según una condición.
- Para implementarlas, necesitamos operadores y condiciones, cuya sintaxis vamos a ir estudiando.
- A modo de resumen, presentamos la siguiente tabla:
Estructura de Control | Sintaxis en PHP | Ejemplo |
---|---|---|
Secuencial |
{ sentencia_1; sentencia_2; // ... } |
$num = rand(-10,20); echo "Se ha generado el número $num"; |
Selectiva |
if (expresion_booleana) { sentencia_1; sentencia_2; } sentencia_3; |
$num = rand(-10,20); if ($num < 0) { echo "El número $numero es negativo"; }else{ echo "El número $numero es positivo"; } |
Repetitiva |
while (expresion_booleana) { sentencia_1; sentencia_2; } sentencia_3; |
$num = 0; $total = 0; while ($num < 100) { $total = $total + $num; $num = $num + 1; } echo "Los primeros 100 números suman $total"; |
Instrucciones Secuenciales
- En Este tipo de estructura de control, las instrucciones se ejecutan una tras otra de.
- Las instrucciones se ejecutan en el orden en que aparecen, de forma secuencial, sin saltos ni repeticiones en el proceso.
- La imagen muestra un flujo en el que cada paso se realiza de forma consecutiva, de arriba hacia abajo.
Ejemplos de Estructura Secuencial en PHP
Operaciones matemáticas en secuencia
| |
<?php // Asignación de valores a variables $a = 5; $b = 10; $c = $a + $b; // Se suma $a y $b $d = $c * 2; // El resultado se multiplica por 2 echo "El resultado final es $d"; // Imprime el resultado ?>
|
Mostrar mensajes
| |
<?php echo "Primero se ejecuta esta línea.<br />\n"; echo "Luego se ejecuta esta línea.<br />\n"; echo "Finalmente, se ejecuta esta última línea."; ?>
|
- En ambos ejemplos
* Las instrucciones se ejecutan en orden, sin interrupciones. * Cada línea de código sigue a la anterior y se ejecuta solo una vez.
Esta estructura es la más simple de las estructuras de control y establece la base para comprender el flujo de ejecución en un programa.
Selección con `if`
- La estructura de control if permite evaluar una expresión booleana (una condición que puede ser verdadera o falsa).
- Siempre la expresión booleana va entre paréntesis
|
Estructura IF | Estructura IF ELSE |
---|---|
Sintaxis Básica
- La estructura básica de if es:
if (expresion_booleana) Sentencia_1;
- Si hay más de una sentencia a ejecutar cuando la condición es verdadera, debemos utilizar llaves `{ }` para agrupar el bloque de instrucciones, también lo podemos poner si solo hay una instruccion:
if (expresion_booleana) { Sentencia_1; Sentencia_2; } if (expresion_booleana){ Sentencia_1; }
- La indentación
- Es muy importante la indentación.
- Consiste en dejar espacios o sangrías al inicio de cada línea de código dentro de un bloque.
- Esto ayuda a visualizar la estructura y jerarquía de las instrucciones, facilitando la lectura y comprensión del código.
- Una buena indentación es fundamental para evitar errores y mantener el código organizado0.
- Ejemplos
Programa que obtien el valor absoluto de un número |
---|
$num = rand(-10, 20); if ($num < 0) { $num = -$num; } echo "El valor absoluto del número es $num"; }} |
- Ejercicios
- Realiza los siguientes ejercicios
echo "<h1>El precio de $producto es ${$producto}</h1>";
|
If gráficamente (ordinagrama)
La imagen muestra el flujo de ejecución: si la expresión booleana es true', se ejecutan las sentencias dentro del bloque `if`; si es false, el flujo continúa después del bloque.
`if...else`
- Podemos añadir una estructura else para especificar un bloque de sentencias que se ejecutará solo cuando la condición sea false.
if (expresion_booleana) { bloque_de_sentencias_1; } else { bloque_de_sentencias_2; }
- Ejemplo de `if...else`
{{plegable|hidden|Miramos si una edad en mayor o menor de edad| <source lang=php> $edad = rand(1,35); if ($edad >= 18) { echo "Eres mayor de edad."; } else { echo "Eres menor de edad."; }
}}
- Si $edad es 18 o más, se imprime "Eres mayor de edad". Si $edad es menor que 18, se imprime "Eres menor de edad".
if...else gráfico (Ordinograma)
La imagen muestra que si la condición es **true**, se ejecuta el bloque `if`; si es **false**, se ejecuta el bloque `else`.
- Realiza los siguientes ejercicios
`if...elseif...else`
- La estructura `if...elseif...else` permite evaluar múltiples condiciones en secuencia. Solo se ejecutará el bloque correspondiente a la primera condición verdadera.
if (expresion_booleana_1) { bloque_sentencias_1; } elseif (expresion_booleana_2) { bloque_sentencias_2; } elseif (expresion_booleana_3) { bloque_sentencias_3; } else { bloque_sentencias_4; }
Ejemplo de `if...elseif...else`
$nota = 85; if ($nota >= 90) { echo "Excelente"; } elseif ($nota >= 75) { echo "Bueno"; } elseif ($nota >= 50) { echo "Aprobado"; } else { echo "Reprobado"; }
- En este ejemplo, dependiendo del valor de `$nota`, el programa imprime un mensaje diferente. Solo se ejecuta el bloque de la primera condición verdadera.
Visualización del `if...elseif...else`
La imagen muestra cómo se evalúan varias condiciones en secuencia hasta que una sea verdadera. Si ninguna lo es, se ejecuta el bloque `else`.
Sintaxis Alternativa
- PHP permite una sintaxis alternativa para `if`, `else`, y `elseif`, especialmente útil cuando se intercala código HTML:
if (condicion): Sentencia_1; elseif (otra_condicion): Sentencia_2; else: Sentencia_3; endif;
- Ejemplo con HTML:
<?php if (true): ?> <h1>Este contenido se mostrará</h1> <?php else: ?> <h1>Este contenido no se mostrará</h1> <?php endif; ?>
Ejercicio Propuesto
- Escribe un programa que evalúe la temperatura y muestre un mensaje según el rango:
- Si la temperatura es menor que 0: "Hace mucho frío". - Si la temperatura está entre 0 y 15: "Hace frío". - Si la temperatura está entre 15 y 30: "Temperatura agradable". - Si la temperatura es mayor que 30: "Hace calor".
$temp = rand(-10, 40); // Genera una temperatura aleatoria echo "La temperatura actual es $temp grados.\n"; // Escribe el código del ejercicio aquí
Operador Ternario
- El operador ternario es una forma más compacta de expresar una estructura if-else en una única línea, ideal cuando se desea evaluar una condición y devolver un valor en función del resultado.
- Esta expresión retorna un valor según la condición especificada.
(expresión_booleana) ? valor_si_true : valor_si_false;
- El valor que retorna es el resultado de la expresión que corresponda según el valor de la condición. Esta expresión es equivalente a:
if (expresión_booleana) valor_si_true; else valor_si_false;
- Usar el operador ternario ayuda a escribir el código de forma más compacta y clara, especialmente en expresiones sencillas.
Ejemplo
Operador ternario |
---|
Programa para par o impar con operador ternario <?php $num = rand(1, 100); echo ($num % 2 == 0) ? "$num es par" : "$num es impar"; ?> |
Estructura if-else |
---|
Programa para par o impar con estructura if-else <?php $num = rand(1, 100); if ($num % 2 == 0) { echo "$num es par"; } else { echo "$num es impar"; } ?> |
- Este operador ternario se utiliza mucho en programación, y conviene entenderlo y habituarse a su uso para escribir código más conciso y claro.
Selección con `switch`
- El operador switch es un selector múltiple que permite evaluar el valor de una variable o expresión y ejecutar el bloque de código correspondiente al primer caso que coincida.
- En PHP, la sentencia `case` puede albergar valores de cualquier tipo simple (números, cadenas, etc.), no está limitada a enteros como en otros lenguajes.
- Esta estructura es útil cuando tenemos múltiples casos excluyentes y queremos evitar múltiples `if-else`.
Sintaxis
La sintaxis básica de un `switch` en PHP es:
switch ($valor) { case "valor1": // acciones break; case "valor2": // acciones break; case "valorn": // acciones break; default: // acciones si no hay coincidencia }
Notas Importantes
- El `switch` busca la primera coincidencia de `$valor` con los valores de los casos (`case`) y ejecuta todas las instrucciones posteriores hasta encontrar un `break`.
- Si no se coloca un `break`, continuará ejecutando los casos siguientes, incluso si no coinciden.
Ejemplo Básico
Ejemplo: Identificar un Nombre
| |||
|
Ejemplo con Rango de Valores
- En algunos casos, queremos evaluar rangos de valores (por ejemplo, edades, calificaciones). En PHP, esto se logra usando expresiones booleanas dentro de los `case` y configurando el `switch` para evaluar `true`.
Ejemplo: Nivel de Madurez
| |||
- 0–2: Bebé - 3–10: Niñez - 11–17: Adolescencia - 18–26: Juventud - 27–59: Adultez - 60–80: Experimentado - Más de 80: Disfrutando la vida
|
Casos Curiosos en PHP
En PHP, al comparar rangos o expresiones booleanas dentro de un `case`, se recomienda configurar el `switch` para evaluar `true`. Esto evita errores de interpretación con valores como `0`.
- Ejemplo Problemático**:
<?php $nota = 0; switch ($nota) { case ($nota >= 0 && $nota <= 3): echo "Nota deficiente"; break; case 4: echo "Nota insuficiente"; break; case 5: echo "Nota suficiente"; break; case ($nota > 6 && $nota < 9): echo "Nota notable"; break; case ($nota >= 9): echo "Nota sobresaliente"; break; } ?>
- Si `$nota = 0`, el primer caso no se ejecuta porque PHP convierte `0` a booleano `false`, lo que genera errores lógicos.
- Solución Recomendada**:
<?php $nota = rand(0, 10); switch (true) { case ($nota >= 0 && $nota <= 3): echo "Nota deficiente"; break; case $nota == 4: echo "Nota insuficiente"; break; case $nota == 5: echo "Nota suficiente"; break; case $nota == 6: echo "Nota bien"; break; case ($nota >= 7 && $nota <= 8): echo "Nota notable"; break; case ($nota >= 9): echo "Nota sobresaliente"; break; } ?>
Actividad Propuesta
- Generar un número aleatorio para el mes (entre 1 y 12) y mostrar el número de días correspondientes. Si el número no corresponde a un mes válido, informar al usuario.
Posible Solución |
---|
<?php $mes = rand(1, 15); switch ($mes) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: echo "$mes es un mes de 31 días"; break; case 4: case 6: case 9: case 11: echo "$mes es un mes de 30 días"; break; case 2: echo "$mes es un mes de 28 o 29 días (dependiendo del año)"; break; default: echo "$mes no es un mes válido"; } ?> |
}}
Selección con el operador match
- El operador match aparece en php en la versión 8
- Es una opción depurada y para casos concretos que puede sustituir de forma más eficiente y legigle a la estructura switch-case
|
- A continuación podemos ver ejemplos
$numero_mes = rand(1,15); $nombre_mes = match ($numero_mes){ 1=>"Enero", 2=>"Febrero", ..... default => "Mes incorrecto" }; echo "El mes $numero_mes es $nombre_mes"
- Aquí vemos el uso de varios valores posibles en la comparación
```php $numero_mes = rand(1,15); $numero_dias=match($mes){ 1,3,5,7,8,10,12 => 31, 4,6,8,11 =>30, 2 => 28 }; echo "El mes $mes tiene $numero_dias días";