|
|
Línea 20: |
Línea 20: |
| <div class="slide"> | | <div class="slide"> |
| ===Selección if=== | | ===Selección if=== |
− | *Sentencia que evlúa una expresión booleana y ejecuta o no en función de que dicha expresión sea true o false | + | *Sentencia que evalúa una expresión booleana y ejecuta o no en función de que dicha expresión sea true o false |
| <source lang=php> | | <source lang=php> |
− | if (condicion) | + | if (expresión_booleana ) |
| Sentencia 1; | | Sentencia 1; |
| </source> | | </source> |
| <hr> | | <hr> |
| + | *En caso de haber más de una setencia, obligatoriamente debemos de poner las llaves especificando el bloque de sentencias |
| <source lang=php> | | <source lang=php> |
| if (condicion){ | | if (condicion){ |
Línea 37: |
Línea 38: |
| ;Sentencias de control | | ;Sentencias de control |
| if (expresion) | | if (expresion) |
− | Sentencia_1; | + | { |
| + | bloque_de_sentencias_1; |
| + | } |
| else | | else |
− | Sentencia_2;
| + | { |
| + | bloque_de_sentencias_2; |
| + | } |
| </source> | | </source> |
| + | |
| *También existe la opción elseif donde aportaremos una condición que se ha de cumplir para que se ejecuten las sentencias que a continuación acompañan. | | *También existe la opción elseif donde aportaremos una condición que se ha de cumplir para que se ejecuten las sentencias que a continuación acompañan. |
| + | *Se garantiza que solo se va a ejecutar un bloque de instrucciones |
| </div> | | </div> |
| | | |
Línea 47: |
Línea 54: |
| ;Estructura de control | | ;Estructura de control |
| <source lang=php> | | <source lang=php> |
− | if (expresion){ | + | if (expresion_booleana_1) |
− | sentencias;
| + | { |
| + | bloque_sentencias_1; |
| } | | } |
− | elseif (expresion){ | + | elseif (expresion_booleana_2){ |
− | sentencias;
| + | bloque_sentencias_2 |
| + | } |
| + | elseif (expresion_booleana_3){ |
| + | bloque_sentencias_3 |
| + | } |
| + | elseif (expresion_booleana_4){ |
| + | bloque_sentencias_4 |
| } | | } |
| else{ | | else{ |
− | sentencias;
| + | bloque_sentencia_5 sentencias; |
| } | | } |
| </source> | | </source> |
Línea 85: |
Línea 99: |
| | | |
| <div class="slide"> | | <div class="slide"> |
| + | |
| ===Operadores ternario=== | | ===Operadores ternario=== |
| *Es una forma más compacta de un if else con una única instrucción. | | *Es una forma más compacta de un if else con una única instrucción. |
Revisión de 04:41 20 dic 2021
Estructuras de control
- Determinan el flujo de ejecución de un programa
- Tenemos tres estructuras de control
- Veremos cómo se implementan en PHP
|
Estructuras de control 1
A continuación veremos las estructuras de control
Son de tres tipos
- Selección
- Iteracción
- Secuenciales
- Para construirlas necesitamos operadores
Selección if
- Sentencia que evalúa una expresión booleana y ejecuta o no en función de que dicha expresión sea true o false
if (expresión_booleana )
Sentencia 1;
- En caso de haber más de una setencia, obligatoriamente debemos de poner las llaves especificando el bloque de sentencias
if (condicion){
Sentencia_1;
Sentencia_2;
}
- Sentencias de control
if (expresion)
{
bloque_de_sentencias_1;
}
else
{
bloque_de_sentencias_2;
}
</source>
- También existe la opción elseif donde aportaremos una condición que se ha de cumplir para que se ejecuten las sentencias que a continuación acompañan.
- Se garantiza que solo se va a ejecutar un bloque de instrucciones
- Estructura de control
if (expresion_booleana_1)
{
bloque_sentencias_1;
}
elseif (expresion_booleana_2){
bloque_sentencias_2
}
elseif (expresion_booleana_3){
bloque_sentencias_3
}
elseif (expresion_booleana_4){
bloque_sentencias_4
}
else{
bloque_sentencia_5 sentencias;
}
- Alternativamente puede usarse esta sintaxis que es usada cuando se quiere intercalar condigo html fuera del php.
- También se puede usar la sintaxis vista anteriormente, pero parece que esta quede más compacta.
if (condicion):
Sentencia 1;
endif;
- Ahora lo vemos con código html
<?php if (true): ?>
<h1>Esta frase seguro que aparece ahor</h1>
<!--escribirmos código html -->
<?php else: ?>
<h1>Aquí escribiré poco ya que no va a aparecer nada</h1>
<!--escribimos código html -->
<?php endif ?>
Operadores ternario
- Es una forma más compacta de un if else con una única instrucción.
Expresión? SentenciaOKExpresion : SentenciaNoOkExpresion
Actividad
Programa que me dé si un número aleatorio es par o impar!
Programa par o impar |
---|
<?php
$num= rand(1,100);
echo ($num%2==0)? "$num es par" : "$num es impar";
?>
|
|
Seleccion switch
- Este es un selector múltiple.
- La sentencia case en php puede albergar cualquier valor de un tipo simple, no está limitado a enteros como en otros lenguajes
- Esta estructura estáindicada cuanto tengamos más de dos casos ante una variable o situación que evaluemos excluyentes entre sí.
- La sintaxis de esta estructura de control es
switch ($valor){
case: "valor1":
acciones
break;
case: "valor1":
acciones
break;
case: "valor1":
acciones
break;
default:
acciones si no hay coincidencia anterior
}
- La ejecución de esta sentencia de control, busca la primera coincidencia de $valor con los difentes case.
- Posteriormente ejecutaría todas las instruciones hasta que encuentre un break.
- En caso de no haber break en el case correspondiente ejecutaría el código de los difernetes case hasta que llege al final de la estructura o bien ejecute una instrución break .
- Switch
|
uso de switch
|
|
- Hacer un programa que nos muestre si un nombre es María, Pedro, o no es ninguno de ellos
Posible solución |
---|
<?php
switch ($nombre){
case "Maria":
echo "eres una chica";
break;
case "Pedro";
echo "eres una chico";
break;
default:
echo "no se qué nombre tienes";
}
?>
|
|
Generar mes y mostrar número de días
- Hacer un programa que muestre el número de días que tiene un més
- El número de mes se obtendrá en un valor aleatorio entre 1 y 15
- El programa me mostrará el número de días y si el mes no es correcto me informará de ello
Posible solución |
---|
<?php
//Generamos un número de mes
$mes = rand(1, 20);
//Evaluamos en número de días del mes generado
switch ($mes) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
echo "$mes, mes de 31 días";
break;
case 4:
case 6:
case 10:
case 11:
echo "$mes, mes de 30 días";
break;
case 2:
echo "$mes, mes de 29 o 28 días";
break;
default:
echo "$mes, mes incorrecto ";
}
?>
|
|
- Vamos a observar una situación curiosa de php en esta estructura de control
- Supongamos que queremos evaluar el valor de una nota, un valor entero y compararlo con rangos de valores, según se expone a continuación
0-3 deficiente
4 insuficiente
5 suficiente
6 bien
7-8 notable
9-10 sobresaliente
- Si hacemos el programa como se expone a continuación, aparentemente vemos que funciona
$nota = rand (0,10);
switch ($nota){
case ($nota>=0 and $nota<=3):
echo "<h1>Nota $nota es deficiente</h1>";
break;
case 4:
echo "<h1>Nota $nota es insuficiente</h1>";
break;
case 5:
echo "<h1>Nota $nota es suficiente</h1>";
break;
case 6:
echo "<h1>Nota $nota es bien</h1>";
break;
case ($nota>6 and $nota<9):
echo "<h1>Nota $nota es notable</h1>";
break;
case ($nota>=9):
echo "<h1>Nota $nota es sobresalinte</h1>";
break;
}
?>
- Pero observa que si $nota vale 0, no está funcionando correctamente
- Esto es por que en php estoy comparando valores de diferente tipo y realiza una conversión, (de nuevo queda patente la expresividad de php)
- Si la expresión del case es un valor booleano, el valor $nota, se convierte a booleano
- Si el valor es 0, lo voy comparando con las difernetes expresione. Vemos qué ocurre en este caso ($nota =0):
- 1.-Primer case: case ($nota>=0 and $nota<=3)
Esta expresión da TRUE, ya que nota es >=0.
entonces estoy comparando 0 con TRUE. Convierto 0 a booleano y estaría comparando FALSE con TRUE
que es falso, por lo que no ejectua este case
En este caso comparo 0 con 4 que es FALSE, por lo que tampoco ejecuto este case
- 3.-Tercer y cuarto case, igual que el segundo
- 4.-Quinto case: case ($nota>6 and $nota<9)
En este caso la expresión devuelve FALSE, ya que 0 no es mayor que 6 ni menor que 9, por lo que
comparo 0 con FALSE. Se convierte 0 a booleano y compararía FALSE con FALSE, que como es igual
me retorno TRUE y ejecutaría este case.
Para solucionar esta situación, en php lo que debemos hacer es buscar una expresión que sea TRUE, por lo que en los diferentes case debemos especificar expresiones booleanas de forma que aquella que sea TRUE es la que queremos que se ejecute. Esto implicaría poner el valor TRUE en el switch. Veamos cómo queda en el código
$nota = rand (0,10);
switch (TRUE){
case ($nota>=0 and $nota<=3):
echo "<h1>Nota $nota es deficiente</h1>";
break;
case $nota==4:
echo "<h1>Nota $nota es insuficiente</h1>";
break;
case $nota==5:
echo "<h1>Nota $nota es suficiente</h1>";
break;
case $nota==6:
echo "<h1>Nota $nota es bien</h1>";
break;
case ($nota>6 and $nota<9):
echo "<h1>Nota $nota es notable</h1>";
break;
case ($nota>=9):
echo "<h1>Nota $nota es sobresalinte</h1>";
break;
}
Iteración while
- Como en todos los bucles debemos siempre tener encuenta
- inicializar la variable de control
- actualizarla correctamente dentro del bucle
- realizar de forma correcta la evaluación de condición (< o <=), (> o >=), ...
Uso de while
- Mostrar la suma de los primeros 100 números naturales
- Se quiere ver el número de iteración y la suma hasta ese momento (Es decir queremos ver cien líneas)
- Cada iteración que aparezca en numeración ordinal en símbolo 1ª , 2ª, ...
Posible solución |
---|
<?php
$i = 0;
while ($i < 100) {
$suma+=$i;
$i++;
echo "iteracción {$i}ª Suma $suma<br />";
}
?>
|
|
Iteracción do-while
- Este tipo de bucle donde seguro que al menos se ejecuta un iteracción
- Respecto al anterior nos ahorra una comparación.
Usando do-while
- Modifica el ejercicio anterior usando un do-wile
|
Iteración for
- Es un bucle de tipo contador
for (expresion_inicial; condicion;expresion_actualizar){
sentencias;
}
- Estructura for
- expresion_inicial
-
- Se ejecuta una sola vez al comienzo del bucle. se usa para inicializar variables
- condición
- Es una expresión booleana que se evalúa en cada interacción
- Si da un valor false, ya no se ejecuta ninguna vez
- Si no hay expresión se toma como true
- En este caso para que el bucle no sea infinito deberá llevar algún break (instrucción de terminación de bloque) en algún momento
- Estructura for
- condición
<?php
for ($a=0; ;$a++){
echo "$a*$a=".$a*$a."<br>";
if ($a==10)
break;
}
?>
- Estructura for
- expresion_actualizar
- Esta expresión actualiza el valor de alguna/as variables
- Se ejecuta en cada interactivo
<?php
for ($a=0;$a<10 ;$a++){
echo "$a*$a=".$a*$a."<br>";
}
?>