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

De WikiEducator
Saltar a: navegación, buscar
(Página creada con «=== Estructuras de Control === *Las estructuras de control determinan el flujo de ejecución de un programa, especificando el orden en que se ejecutarán las instrucciones....»)
 
 
(24 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 
=== Estructuras de Control ===
 
=== Estructuras de Control ===
*Las estructuras de control determinan el flujo de ejecución de un programa, especificando el orden en que se ejecutarán las instrucciones.
+
*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:
+
*Existen '''tres tipos principales de estructuras de control''':
# **Secuenciales**: Ejecutan las instrucciones en orden, una tras otra.
+
# '''Secuenciales''': Ejecutan las instrucciones en orden, una tras otra.
# **Selectivas**: Permiten elegir entre diferentes caminos según una condición.
+
# '''Selectivas''': Permiten elegir entre diferentes caminos según una condición.
# **Repetitivas**: Ejecutan un bloque de instrucciones varias veces según una condición.
+
# '''Repetitivas''': Ejecutan un bloque de instrucciones varias veces según una condición.
  
*Para implementarlas, necesitamos operadores y condiciones, que estudiaremos a continuación.
+
*Para implementarlas, necesitamos operadores y condiciones, cuya sintaxis vamos a ir estudiando.
  
 
*A modo de resumen, presentamos la siguiente tabla:
 
*A modo de resumen, presentamos la siguiente tabla:
Línea 14: Línea 15:
 
|+ style="background:DarkSlateBlue; color:white; text-align:center;"|'''Resumen de las estructuras de control'''
 
|+ style="background:DarkSlateBlue; color:white; text-align:center;"|'''Resumen de las estructuras de control'''
 
|- style="background:Lavender; color:black"
 
|- style="background:Lavender; color:black"
! width="150px" | Tipo de Estructura de Control
+
! width="100px" | Estructura de Control
! width="200px" | Sintaxis en PHP
+
! width="150px" | Sintaxis en PHP
! width="200px" | Ejemplo
+
! width="150px" | Ejemplo
 
|-
 
|-
| **Secuencial**
+
| '''Secuencial'''
 
||
 
||
 
<source lang=php>
 
<source lang=php>
Línea 33: Línea 34:
 
</source>
 
</source>
 
|-
 
|-
| **Selectiva**
+
| '''Selectiva'''
 
||
 
||
 
<source lang=php>
 
<source lang=php>
Línea 46: Línea 47:
 
$num = rand(-10,20);
 
$num = rand(-10,20);
 
if ($num < 0) {
 
if ($num < 0) {
   echo "El número debe ser mayor que 0, reasignamos el valor 1";
+
   echo "El número $numero es negativo";
  $num = 1;
+
}else{
 +
  echo "El número $numero es positivo";
 
}
 
}
echo "El valor del número es $num";
 
 
</source>
 
</source>
 
|-
 
|-
| **Repetitiva**
+
| '''Repetitiva'''
 
||
 
||
 
<source lang=php>
 
<source lang=php>
Línea 72: Línea 73:
 
</source>
 
</source>
 
|}
 
|}
 +
=== 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.
 +
 +
[[Archivo:secuencial.png|center]]
 +
 +
*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 ====
 +
<br />
 +
{{MRM_Ejemplo|Title=Operaciones matemáticas en secuencia|
 +
<source lang=php>
 +
<?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
 +
?>
 +
</source>
 +
}}
 +
{{MRM_Ejemplo|Title=Mostrar mensajes|
 +
*Ejemplo 2: Mostrar mensajes secuenciales
 +
<source lang=php>
 +
<?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.";
 +
?>
 +
</source>
 +
}}
 +
<br />
 +
;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
 +
{{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 ====
 +
*La estructura básica de '''if''' es:
 +
<source lang=php>
 +
if (expresion_booleana)
 +
    Sentencia_1;
 +
</source>
 +
 +
*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:
 +
<source lang=php>
 +
if (expresion_booleana) {
 +
    Sentencia_1;
 +
    Sentencia_2;
 +
}
 +
if (expresion_booleana){
 +
    Sentencia_1;
 +
}
 +
 +
</source>
 +
;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
 +
{{plegable|hidden|Programa que obtien el valor absoluto de un número|
 +
<source lang=php>
 +
$num = rand(-10, 20);
 +
if ($num < 0) {
 +
  $num = -$num;
 +
}
 +
echo "El valor absoluto del número es $num";
 +
 +
}}
 +
 +
</source>
 +
}}
 +
;Ejercicios: Realiza los siguientes ejercicios
 +
{{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/ejercicio11}}
 +
{{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/ejercicio12}}
 +
{{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/ejercicio13}}
 +
 +
==== If gráficamente (ordinagrama) ====
 +
[[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.
 +
 +
==== `if...else` ====
 +
*Podemos añadir una estructura '''else''' para especificar un bloque de sentencias que se ejecutará solo cuando la condición sea '''false'''.
 +
<source lang=php>
 +
if (expresion_booleana) {
 +
    bloque_de_sentencias_1;
 +
} else {
 +
    bloque_de_sentencias_2;
 +
}
 +
</source>
 +
 +
;Ejemplo de `if...else`
 +
<source lang=php>
 +
 +
{{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.";
 +
}
 +
</source>
 +
}}
 +
*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]]
 +
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
 +
{{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/ejercicio14}}
 +
{{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/ejercicio15}}
 +
{{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/ejercicio100}}
 +
 +
 +
==== `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.
 +
 +
<source lang=php>
 +
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;
 +
}
 +
</source>
 +
 +
==== Ejemplo de `if...elseif...else` ====
 +
<source lang=php>
 +
$nota = 85;
 +
if ($nota >= 90) {
 +
    echo "Excelente";
 +
} elseif ($nota >= 75) {
 +
    echo "Bueno";
 +
} elseif ($nota >= 50) {
 +
    echo "Aprobado";
 +
} else {
 +
    echo "Reprobado";
 +
}
 +
</source>
 +
 +
*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` ====
 +
[[Archivo:estructura_if_elseif.png|center|700px]]
 +
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:
 +
<source lang=php>
 +
if (condicion):
 +
    Sentencia_1;
 +
elseif (otra_condicion):
 +
    Sentencia_2;
 +
else:
 +
    Sentencia_3;
 +
endif;
 +
</source>
 +
 +
*Ejemplo con HTML:
 +
<source lang=php>
 +
<?php if (true): ?>
 +
    <h1>Este contenido se mostrará</h1>
 +
<?php else: ?>
 +
    <h1>Este contenido no se mostrará</h1>
 +
<?php endif; ?>
 +
</source>
 +
 +
==== 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".
 +
<source lang=php>
 +
$temp = rand(-10, 40); // Genera una temperatura aleatoria
 +
echo "La temperatura actual es $temp grados.\n";
 +
 +
// 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>

Última revisión de 18:54 15 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";

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.

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

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
Ejercicios
Realiza los siguientes ejercicios


Icon activity.jpg
Ejercicio 11:Probando variables de variables
  • Declaramos el precio de 5 productos de hortalizas
  • Declaramos la variable $producto
  • Vamos visualizando el producto y su precio cambiando solo el valor del producto por el nombre de la hortaliza escribiendo la cadena
 echo "<h1>El precio de $producto es ${$producto}</h1>";





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




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.

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

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




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

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; ?>

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



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.

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

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.



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



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.

}}

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


Icon key points.gif

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
$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";