Diferencia entre revisiones de «Plantilla:ManuelRomero/PHP/EstructurasControlSelectiva»

De WikiEducator
Saltar a: navegación, buscar
 
(20 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 +
__NOTOC__
 
<div style="float:none; clear:none; margin:0 0.3em 0.5em 0; padding:0.5em 1.4em 0.8em 0;">
 
<div style="float:none; clear:none; margin:0 0.3em 0.5em 0; padding:0.5em 1.4em 0.8em 0;">
 
           <div id="toc" class="toc">
 
           <div id="toc" class="toc">
 
                 <div id="toctitle">
 
                 <div id="toctitle">
                        <h2>Índice de contenidos</h2>
+
===Tabla de contenidos===
 
                 </div>
 
                 </div>
* [[#Estructuras_de_Control|1. Estructuras de Control]]
+
* [[#Estructuras de Control|1. Estructuras de Control]]
 
* [[#Instrucciones_Secuenciales|2. Instrucciones Secuenciales]]
 
* [[#Instrucciones_Secuenciales|2. Instrucciones Secuenciales]]
 
** [[#Ejemplos_de_Estructura_Secuencial_en_PHP|2.1 Ejemplos de Estructura Secuencial en PHP]]
 
** [[#Ejemplos_de_Estructura_Secuencial_en_PHP|2.1 Ejemplos de Estructura Secuencial en PHP]]
* [[#Selección_con_if|3. Selección con if]]
+
* [[#Selección con if|3. Selección con if]]
 
** [[#Sintaxis_Básica|3.1 Sintaxis Básica]]
 
** [[#Sintaxis_Básica|3.1 Sintaxis Básica]]
 
** [[#If_gráficamente_(ordinagrama)|3.2 If gráficamente (ordinagrama)]]
 
** [[#If_gráficamente_(ordinagrama)|3.2 If gráficamente (ordinagrama)]]
Línea 27: Línea 28:
 
** [[#Actividad_Propuesta|5.6 Actividad Propuesta]]
 
** [[#Actividad_Propuesta|5.6 Actividad Propuesta]]
 
* [[#Selección_con_el_operador_match|6. Selección con el operador match]]
 
* [[#Selección_con_el_operador_match|6. Selección con el operador match]]
** [[#Ejemplo_Operador_Match|6.1 Ejemplo Operador Match]]
+
** [[#Ejemplo Operador Match|6.1 Ejemplo Operador Match]]
  
 
</div>
 
</div>
 
</div>
 
</div>
 
 
  
 
=== Estructuras de Control ===
 
=== Estructuras de Control ===
Línea 153: Línea 152:
  
 
{{BotonIndice
 
{{BotonIndice
|enlace=#Tabla_de_Contenidos
+
|enlace=#Tabla de contenidos
 
|texto=Volver al índice
 
|texto=Volver al índice
 
}}
 
}}
Línea 228: Línea 227:
 
*Los '''operadores de comparación''' permiten comparar dos valores. Estos valores dependen de los [tipos que tengan asignados](http://php.net/manual/es/language.types.type-juggling.php).
 
*Los '''operadores de comparación''' permiten comparar dos valores. Estos valores dependen de los [tipos que tengan asignados](http://php.net/manual/es/language.types.type-juggling.php).
 
*Pueden verse las diferencias comparativas en la [tabla de comparación de tipos](http://php.net/manual/es/types.comparisons.php).
 
*Pueden verse las diferencias comparativas en la [tabla de comparación de tipos](http://php.net/manual/es/types.comparisons.php).
 
+
{| class="wikitable" style="background-color:#f9f9f9; border:1px solid #ddd; width:80%; text-align:left;"
{| class="wikitable"
+
|+ '''Operadores de comparación'''
|+ Operadores de comparación
+
 
|-
 
|-
! **Ejemplo** !! **Nombre** !! **Resultado**
+
! style="background-color:#e0e0e0;" | '''Ejemplo''' !! '''Nombre''' !! '''Resultado'''
 
|-
 
|-
| $x == $y || Igual || true, si son iguales (adapta tipos, lo analizaremos).
+
| $x == $y || Igual || '''true''', si son iguales (adapta tipos, lo analizaremos).
 
|-
 
|-
| $x === $y || Idéntico || true, si son exactamente iguales (valor y tipo).
+
| $x === $y || Idéntico || '''true''', si son exactamente iguales (valor y tipo).
 
|-
 
|-
| $x != $y || Distinto || true, si son diferentes, (adapta tipos, lo analizaremos).
+
| $x != $y || Distinto || '''true''', si son diferentes (adapta tipos, lo analizaremos).
| $x <> $y || Distinto || true, si son diferentes, (adapta tipos, lo analizaremos).
+
 
|-
 
|-
| $x !== $y || No idéntico || true, si son diferentes (valor y tipo) .
+
| $x <> $y || Distinto || '''true''', si son diferentes (adapta tipos, lo analizaremos).
 
|-
 
|-
| $x < $y || Menor que || true, si $x es menor que $y.
+
| $x !== $y || No idéntico || '''true''', si son diferentes (valor y tipo).
 
|-
 
|-
| $x > $y || Mayor que || true, si $x es mayor que $y.
+
| $x < $y || Menor que || '''true''', si $x es menor que $y.
 
|-
 
|-
| $x <= $y || Menor o igual que || true, si $x es menor o igual que $y.
+
| $x > $y || Mayor que || '''true''', si $x es mayor que $y.
 
|-
 
|-
| $x >= $y || Mayor o igual que || true, si $x es mayor o igual que $y.
+
| $x <= $y || Menor o igual que || '''true''', si $x es menor o igual que $y.
 +
|-
 +
| $x >= $y || Mayor o igual que || '''true''', si $x es mayor o igual que $y.
 
|}
 
|}
 +
  
 
{{Nota| PHP si comparo valores de diferentes tipo, va a realizar conversiones que veremos más adelante
 
{{Nota| PHP si comparo valores de diferentes tipo, va a realizar conversiones que veremos más adelante
Línea 259: Línea 259:
 
Los operadores lógicos permiten combinar expresiones booleanas para realizar evaluaciones más complejas.
 
Los operadores lógicos permiten combinar expresiones booleanas para realizar evaluaciones más complejas.
  
{| class="wikitable"
+
{| class="wikitable" style="background-color:#f9f9f9; border:1px solid #ddd; width:70%; text-align:left;"
|+ Operadores Lógicos
+
|+ '''Operadores Lógicos'''
 
|-
 
|-
! **Operador** !! **Resultado**
+
! style="background-color:#e0e0e0; padding:5px;" | '''Operador''' !! style="background-color:#e0e0e0; padding:5px;" | '''Resultado'''
 
|-
 
|-
| $x and $y || true si $x y $y son true.
+
| $x and $y || '''true''' si $x y $y son '''true'''.
 
|-
 
|-
| $x or $y || true si uno de los dos es true (o los dos).
+
| $x && $y || '''true''' si $x y $y son '''true'''.
 
|-
 
|-
| $x xor $y || true si **sólo uno** de los dos es true.
+
| $x or $y || '''true''' si uno de los dos es '''true''' (o los dos).
 
|-
 
|-
| !$x || true si $x **no** es true.
+
| $x <nowiki>||</nowiki> $y || '''true''' si uno de los dos es '''true''' (o los dos).
 
|-
 
|-
| $x && $y || true si $x y $y son true.
+
| !$x || '''true''' si $x '''no''' es '''true''' (Es para negar algo=.
 
|-
 
|-
| $x <no wiki>||</nowiki> $y || true si uno de los dos es true (o los dos).
+
| $x xor $y || '''true''' si '''sólo uno''' de los dos es '''true''' (No muy usado).
 +
 
 +
 
 
|}
 
|}
  
Línea 494: Línea 496:
 
|texto=Volver al índice
 
|texto=Volver al índice
 
}}
 
}}
 +
{{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/17_TirarDado}}
 +
 
=== Selección con switch ===
 
=== 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.
 
*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.
Línea 668: Línea 672:
 
}}
 
}}
  
;Ejercicos propuestos
 
{{ManuelRomero/PHP/EjerciciosSintaxisBasica }}
 
 
*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.
 
*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.
  
Línea 694: Línea 696:
 
}}
 
}}
  
 
{{BotonIndice
 
|enlace=#Tabla_de_Contenidos
 
|texto=Volver al índice
 
}}
 
 
 
 
===Selección con el operador match===
 
===Selección con el operador match===
*El operador match aparece en php en la versión 8
+
*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
+
*Es una opción depurada y para casos concretos que puede sustituir a la estructura switch-case
 +
*A diferencia del '''switch-case''', es un '''operador''', y por lo tanto '''devuelve un valor'''.
 +
;Su sintaxis:
 +
<source lang=php>
 +
$variable = match($valor){
 +
valor_rama_1 => valor_retornado_rama_1,
 +
valor_rama_2 => valor_retornado_rama_2,
 +
....
 +
default => valor_retornado_si_ninguna_coincidencia_anterior
 +
};
 +
</source>
 +
{{MRM_Puntos clave|title=Observa|
 +
*1.- Lo que retorne '''lo asigno''' a una variable
 +
<source lang=php>
 +
$variable = match ($valor){
 +
....
 +
};
 +
</source>
 +
*2.- En cada rama tengo '''dos partes''' separadas por el operador '''<nowiki>=></nowiki>''':
 +
** El valor con el que comparo
 +
** El valor que retorno si hay un match (coincidencia)
 +
<source lang=php>
 +
valor_rama_1 => valor_retornado_rama_1,
 +
</source>
 +
*3. Puedo tener una rama de '''default'''
 +
<source lang=php>
 +
default => valor_retornado_si_ninguna_coincidencia_anterior
 +
</source>
 +
*4. Al final hay un punto y coma, ya que termina la asignación
 +
<source lang=php>
 +
$variable = match ($valor){
 +
....
 +
};
 +
</source>
 +
}}
 +
 
 
{{MRM_Puntos clave|Title=Operador match|
 
{{MRM_Puntos clave|Title=Operador match|
*1.- Siempre retornará un valor
+
*1.- Siempre '''retornará un valor'''.
*2.- Evaluamos una expresión, al igual que con switch-case
+
*2.- '''Evaluamos un valor''', 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.
+
*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
+
*4.- Igual que en switch-case existe '''la rama default'''.
*5.- Como va a ser parte de una asignación, debe de terminar en ;
+
*5.- Como va a ser parte de una asignación, debe de terminar en ''';''' (punto y comoa).
*6.- Las comparaciones que hace son estrictas  a diferenica del switch-case que hace comparaciones no estrictas  
+
*6.- Las comparaciones que hace '''son estrictas''' a diferenica del switch-case que hace comparaciones no estrictas  
 
}}
 
}}
 
*A continuación podemos ver ejemplos
 
*A continuación podemos ver ejemplos
Línea 739: Línea 770:
 
|texto=Volver al índice
 
|texto=Volver al índice
 
}}
 
}}
 +
;Ejercicio
 +
{{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/Calculadora}}

Última revisión de 17:40 25 nov 2024

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:
  1. Secuenciales: Ejecutan las instrucciones en orden, una tras otra.
  2. Selectivas: Permiten elegir entre diferentes caminos según una condición.
  3. 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:
Resumen de las estructuras de control
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";
 Volver al índice


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.
Secuencial.png
  • 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



Icon casestudy.gif
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
?>




Icon casestudy.gif
Mostrar mensajes
  • Ejemplo 2: Mostrar mensajes secuenciales
<?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.


 Volver al índice


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


Icon key points.gif

Puntos clave

Si la expresión booleana es true ejecutará un bloque de sentencias
Si no, o lo omitirá, o ejecutará otro si se especifica.



Estructura IF Estructura IF ELSE
Estructura if.png
Estructura if else.png
 Volver al índice

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.

Expresiones booleanas


(Comment.gif: Las expresiones booleanas las veremos en el capítulo siguiente Expresiones.

Esto es una introducción para poderlas utilizar en las estructuras de control.

)




Icon define.gif
Definición

Es un conjunto de operandos y operadores

Qué se evalúa

y da como resultado un valor de un determinado tipo.



Icon key points.gif

Puntos clave

El tipo de la expresión lo establece el operador.
  • Será el tipo del valor devuelto.


Las expresiones booleanas se definen mediante los siguientes operadores:

Operadores de comparación.
Operadores booleanos o lógicos.
Operadores de comparación.
Operadores de comparación
Ejemplo Nombre Resultado
$x == $y Igual true, si son iguales (adapta tipos, lo analizaremos).
$x === $y Idéntico true, si son exactamente iguales (valor y tipo).
$x != $y Distinto true, si son diferentes (adapta tipos, lo analizaremos).
$x <> $y Distinto true, si son diferentes (adapta tipos, lo analizaremos).
$x !== $y No idéntico true, si son diferentes (valor y tipo).
$x < $y Menor que true, si $x es menor que $y.
$x > $y Mayor que true, si $x es mayor que $y.
$x <= $y Menor o igual que true, si $x es menor o igual que $y.
$x >= $y Mayor o igual que true, si $x es mayor o igual que $y.


(Comment.gif: PHP si comparo valores de diferentes tipo, va a realizar conversiones que veremos más adelante

)


Operadores Lógicos

Los operadores lógicos permiten combinar expresiones booleanas para realizar evaluaciones más complejas.

Operadores Lógicos
Operador Resultado
$x and $y true si $x y $y son true.
$x && $y true si $x y $y son true.
$x or $y true si uno de los dos es true (o los dos).
$x || $y true si uno de los dos es true (o los dos).
 !$x true si $x no es true (Es para negar algo=.
$x xor $y true si sólo uno de los dos es true (No muy usado).


Formularios


(Comment.gif: Los Formularios, constituyen un tema posterior

Realizamos una introducción para tener más opciones a la hora de proponer ejercicios
  • De esta forma podremos aportar valores por parte del usuario a la ejecución de los mismos

)



Ejemplos
Ejercicios
Realiza los siguientes ejercicios


Icon activity.jpg
Ejercicio 12: Selección simple
  • Generamos un número aleatoria entre 1 y 100
  • Si el número es par informamos que ha ganado un premio
  • En cualquier caso mostramos el número obtenido





Icon activity.jpg
Ejercicio 13: Selección simple 2
  • Generamos una edad entre 1 y 90 años
  • Mostraremos la edad generada
  • En caso de tener menos de 18 años informaremos de ello en un mensaje en rojo




 Volver al índice


If gráficamente (ordinagrama)

Estructura if.png

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.

 Volver al índice


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".
 Volver al índice


if...else gráfico (Ordinograma)

Estructura if else.png

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



Icon activity.jpg
Ejercicio 14: Selección simple completa
  • Generamos una edad entre 1 y 90 años
  • El programa nos dirá si la edad generada es o no mayor de edad





Icon activity.jpg
Mostrar nombre mes
  • Generamos un número entre 1 y 15
  • Mostramos el número del mes y su nombre (el que correspondiente al número: enero, febrero, ...
  • En caso de ser mayor de 12 mostraremos mes incorrecto
  • Usamos la estructura
if (..)
       ...
 elseif
       ...
 elseif 
       ...
 ...
 else
     ....





Icon activity.jpg
Ecuación segundo grado
  • Se trata de encontrar dos valores para que la ecuación se satisfaga (que sea 0)
  • La ecuación que lo resuelve también se aporta
E1g.png
Podemos ver la ecuación que resuelve el problema
E1g analisis.png




 Volver al índice


`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;
}
 Volver al índice

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`

Estructura if elseif.png

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; ?>
 Volver al índice


Ejercicio: Selección con html



Icon activity.jpg
  • Un formulario que pida edad y nombre
  • En función de la edad mostraremos un texto y otro
  • Si es menor de edad mostramos un mensaje en color azul de fondo que es menor de dad
  • En el caso de ser mayor de edad mostramos otro texto con otro color
  • Usamos la estructura
<?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í
 Volver al índice


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.
 Volver al índice

Ejemplo



Icon activity.jpg
Actividad
Determinar si un número aleatorio es par o 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.
 Volver al índice

Ejercicio 17(Con imágenes): Tirar un dado



Icon activity.jpg
Ejercicio 17(Con imágenes): Tirar un dado
  • Tenemos un index.php que nos muestra 6 dados según imagenes

Se trata de hacer un programa que apuestes por un dado El programa generará un valor aleatorio y me dirás si he ganado o perdido. Se puede usar un formulario como sigue:

   <form action="jugar.php" method="post">
       <div style="margin: 0px auto;width:100%; text-align: center">
       <button type="submit" name="dado" value="1">
           <img src="./imagenes/dado_1.png" alt="">
       </button>
       <button type="submit" name="dado" value="2">
           <img src="./imagenes/dado_2.png" alt="">
       </button>
       <button type="submit" name="dado" value="3">
           <img src="./imagenes/dado_3.png" alt="">
       </button>
       <button type="submit" name="dado" value="4">
           <img src="./imagenes/dado_4.png" alt="">
       </button>
       <button type="submit" name="dado" value="5">
           <img src="./imagenes/dado_5.png" alt="">
       </button>
       <button type="submit" name="dado" value="6">
           <img src="./imagenes/dado_6.png" alt="">
       </button>
   </form>

Al ser lo button de tipo submit, al presionar uno de ellos iremos al fichero jugar.php y podremos obtener el valor del botón presionado

  $dado = $_POST['dado'];


Icon key points.gif

Puntos clave

Si quieres un ejecto visual puedes recagar la página cada segundo y que vaya apareciendo los dados
  • Para ello has de añadir una etiqueta meta de tipo refresh en la cabecera de la página
 <meta http-equiv="refresh" content="1">
Esto hará que la página se cargue cada seguno
Dado animado.gif





}}

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
}
 Volver al índice

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



Icon casestudy.gif
Ejemplo: Identificar un Nombre
  • Escribe un programa que evalúe si una variable `$nombre` es "María", "Pedro", o cualquier otro nombre.



 Volver al índice

Ejercicio 16: Selección con switch


  • Genera un número de mes de forma aleatoria.
  • Muestra el número de días que tiene el mes.
  • Genera un mensaje informativo con el texto "El mes X tiene XXX días"
  • Realiza usando `switch`:

(Comment.gif: Intenta que se muestre también el nombre del mes junto con el número de días )


$mes = rand(1, 15);
switch ($mes) {
    case 1:
        $dias=31;
        break;
    case 2:
        $dias=29;
        break;
    // Continúa con los demás casos
    default:
        $dias =  "Mes incorrecto<br />";
}
 Volver al índice

}}

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`.



Icon casestudy.gif
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



 Volver al índice

Casos Curiosos en PHP

  • PHP en una comparación, adapta los tipos a comparar (si puede).
  • Simpre que compare un entero con un booleano, convertirá el entero a booleano.
  • En PHP, si especificamos expresiones booleanas dentro de un case, deberíamos de establecer también un booleano en 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;
}
?>
 Volver al índice


  • 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.

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 a la estructura switch-case
  • A diferencia del switch-case, es un operador, y por lo tanto devuelve un valor.
Su sintaxis
$variable = match($valor){
valor_rama_1 => valor_retornado_rama_1,
valor_rama_2 => valor_retornado_rama_2,
....
default => valor_retornado_si_ninguna_coincidencia_anterior
};


Icon key points.gif

Puntos clave

  • 1.- Lo que retorne lo asigno a una variable
$variable = match ($valor){
 ....
};
  • 2.- En cada rama tengo dos partes separadas por el operador =>:
    • El valor con el que comparo
    • El valor que retorno si hay un match (coincidencia)
valor_rama_1 => valor_retornado_rama_1,
  • 3. Puedo tener una rama de default
default => valor_retornado_si_ninguna_coincidencia_anterior
  • 4. Al final hay un punto y coma, ya que termina la asignación
$variable = match ($valor){
 ....
};




Icon key points.gif

Operador match

  • 1.- Siempre retornará un valor.
  • 2.- Evaluamos un valor, 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 ; (punto y comoa).
  • 6.- Las comparaciones que hace son estrictas a diferenica del switch-case que hace comparaciones no estrictas


  • 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";
 Volver al índice
Ejercicio


Icon activity.jpg
  • Usando el match y un formulario simple, realiza una calculadora con las operaciones básica

Form calculadora basica.png

  • Al seleccionar calcular nos mostrará el resultado

Resultado.png

  • En caso de que el valor no sea numérico, asignaremos un número aleatorio del 1 al 100