PHP Estruturas de control
Ir a la navegación
Ir a la búsqueda
Sumario
if
- Nota: Esta información está baseada na que se atopa na web de php.
- O construtor if permite a execución condicional de fragmentos de código.
- Sintaxe:
1 if (expr) 2 sentenza
- Sendo expr unha expresión que pode ser avaliada como true ou false.
- En caso de ser avaliada como true se executa a sentenza.
Exemplo de código:
1 <?php 2 if ($a > $b) { // Se $a é maior que $b executa dita sentenza 3 echo "a é maior b"; 4 } 5 ?>
- Se queremos executar varias sentenzas temos que facer uso das chaves {....}. Todas as sentenzas que estean dentro das chaves será executadas.
Exemplo de código:
1 <?php 2 if ($a > $b) { 3 echo "a é maior b"; 4 $b = $a; 5 } 6 ?>
- É necesario que a condición estea entre parénteses: (expr).
- Pódense anidar if´s de forma indefinida.
Exemplo de código:
1 <?php 2 if ($a > $b) { 3 echo "a é maior b"; 4 if ($a > $c) { 5 echo "a é maior que c"; 6 } 7 } 8 ?>
- É posible empregar outra sintaxe no if que consiste en ter nunha única liña a sentenza con dous puntos ao final e en vez de empregar o peche de chaves empregamos endif;
Exemplo de código:
1 <?php if ($a > $b): ?> 2 <div>A é maior que b</div> 3 <?php endif; ?>
- Esta sintaxe se emprega cando estamos a mesturar código php e html, quedando moito máis claro.
else
- Nota: Esta información está baseada na que se atopa na web de php.
- else forma parte do if e vai servir para executar un conxunto de sentenzas cando non se cumpra a condición indicada no if (cando o valor da expresión avaliada no if sexa false).
Exemplo de código:
1 <?php 2 if ($a > $b) { 3 echo "a é maior que b"; 4 } else { 5 echo "a é menor ou igual que b"; 6 } 7 ?>
- É posible empregar outra sintaxe no if-else que consiste en ter nunha única liña a sentenza con dous puntos ao final, o else tamén leva dous puntos e en vez de empregar o peche de chaves empregamos endif;
Exemplo de código:
1 <?php if ($a > $b): ?> 2 <div>A é maior que b</div> 3 <?php else: ?> 4 <div>A é menor que b</div> 5 <?php endif; ?>
- Esta sintaxe se emprega cando estamos a mesturar código php e html, quedando moito máis claro.
elseif | else if
- Nota: Esta información está baseada na que se atopa na web de php.
- As dúas formas ('elsif' e 'else if') van facer o mesmo.
- As condicións elseif van despois dun if e se avalían se a condición do if devolve false. A diferenza do else, podemos ter varios elseif un despois doutro e se irán avaliando en orde ata que un deles se avalía como true. Nese intre executarase o seu código e non se avaliará ningún elseif nin else que haia a continuación.
Exemplo de código:
1 <?php 2 if ($a > $b) { 3 echo "a é maior que b"; 4 } elseif ($a == $b) { 5 echo "a é igual a b"; 6 } else { 7 echo "a é menor que b"; 8 } 9 ?>
switch
Máis información en: https://www.php.net/manual/es/control-structures.switch.php
- Permite ter moitos if else if else pero dunha forma moito máis lexible.
- Cada case debe ter un break se non queremos que se executen as ordes do seguinte case.
Exemplo de código:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Exemplo de switch en PHP</title> 5 </head> 6 <body> 7 <h1>Día da Semana</h1> 8 <?php 9 $numeroDia = 3; // Podes cambiar este valor para probar diferentes días 10 11 switch ($numeroDia) { 12 case 1: 13 echo "Hoxe é luns."; 14 break; 15 case 2: 16 echo "Hoxe é martes."; 17 break; 18 case 3: 19 echo "Hoxe é mércores."; 20 break; 21 case 4: 22 echo "Hoxe é xoves."; 23 break; 24 case 5: 25 echo "Hoxe é venres."; 26 break; 27 case 6: 28 echo "Hoxe é sábado."; 29 break; 30 case 7: 31 echo "Hoxe é domingo."; 32 break; 33 default: 34 echo "Número de día non válido."; 35 } 36 ?> 37 </body> 38 </html>
while
- Nota: Esta información está baseada na que se atopa na web de php.
- Sintaxe:
while (expresión) { Sentenzas a executar; }
- Se o while ten unha única sentenza a executar podemos poñer:
while (expresión) Unha única sentenza;
- Existe unha sintaxe alternativa para o anterior:
while (expresión): Sentenzas a executar; endwhile;
- O que fai while é executar as sentenzas que se atopan dentro das chaves ata que a expresión devolva false.
- Fixarse como primeiro se avalía a expresión e se é certa (devolve true) se executan as sentenzas. Se a primeira vez vale false nunca vai entrar a executar as sentenzas.
- Vexamos un exemplo:
<?php $i = 1; while ($i <= 10) { echo $i++; /* o valor presentado sería $i antes do incremento (post-incremento) */ } ?>
- Sairá como resultado os números do 1 ata o 10.
- Ao igual que có if, podemos empregar outra sintaxe cando estamos a mesturar código php e código html.
- Este sería un exemplo de cómo facelo.
<ul> <?php while ($condicion): ?> // código <?php endwhile; ?> </ul>
do-while
- Nota: Esta información está baseada na que se atopa na web de php.
- Sintaxe:
do { Sentenzas a executar; while (expresión);
- O concepto é o mesmo que no caso do bucle while. A diferenza estriba en que neste caso o grupo de sentenzas a executar sempre se executarán a lo menos unha vez, xa que a avaliación da expresión se fai despois de executar as sentenzas.
- Vexamos un exemplo:
<?php $i = 0; do { echo $i++; } while ($i <= 10); ?>
- Amosará todos os números dende 0 ata o 10.
- Se facemos unha modificación a expresión do while para que sexa false na primeira iteración...
<?php $i = 0; do { echo $i++; } while ($i > 10); ?>
- Amosará o valor 0, e sairá do bucle.
for
- Nota: Esta información está baseada na que se atopa na web de php.
- A sentenza 'for' serve para repetir un conxunto de sentenzas mentres se cumpra unha determinada condición. A cada repetición denomínase 'iteración' (ao igual que no caso do while).
- Sintaxe:
for(expr1;expr2;expr3){ Sentenzas a executar; }
- Sendo:
- expr1: Execútase ao comezo do bucle e soamente unha vez. Normalmente é utilizada para dar valores iniciais á variable que se vai utilizar no bucle.
- expr2: Ao comezo de cada iteración avalíase a expr2 e devolverá true ou false. O bucle for seguirá executando as sentenzas ata que expr2 devolva false.
- expr3: Ao final de cada iteración avalíase (execútase) expr3.
- expr1,expr2 e expr3 poden ser calquera sentenza php e poden poñerse varias sentenzas separadas por ',' (coma).
- Normalmente imos utilizar o bucle for para executar un conxunto de sentenzas en base a un contador que se irá incrementando en cada iteración (repetición) ata que chegue a un determinado valor, indicado na expresión 'expr2'.
- Por exemplo:
for($cont=0;$cont<5;$cont++){ printf("Amosando o valor de \$cont: %s<br />",$cont); }
Nota: $cont++ é igual que poñer $cont=$cont+1. Temos tamén a operación contraria ($cont--).
- Este exemplo produce a seguinte saída:
Amosando o valor de $cont:0 Amosando o valor de $cont:1 Amosando o valor de $cont:2 Amosando o valor de $cont:3 Amosando o valor de $cont:4
- Para saír do for sen esperar a que se cumpra a condición indicada no mesmo podemos facer uso da sentenza break.
- Por exemplo:
for($cont=0;$cont<5;$cont++){ if($cont==3) break; printf("Amosando o valor de \$cont: %s<br />",$cont); }
- Saída:
Amosando o valor de $cont:0 Amosando o valor de $cont:1 Amosando o valor de $cont:2
- Para saltar unha iteración (é dicir, que non continúe executando as sentenzas que se atopan dentro do for e avalíe directamente a expr3, saltando ao comezo do bucle) podemos facer uso da sentenza continue.
- Por exemplo:
for($cont=0;$cont<5;$cont++){ if($cont==2) continue; printf("Amosando o valor de \$cont: %s<br />",$cont); }
- Saída:
Amosando o valor de $cont:0 Amosando o valor de $cont:1 Amosando o valor de $cont:3 Amosando o valor de $cont:4
- Podemos utilizar o for (ao igual que o while) para xerar dinamicamente o contido dun formulario dunha páxina web:
- Imaxinemos que dispoñemos en $_POST['num_exemplares'] o número de exemplares dun libro que queremos dar de alta na nosa base de datos (este dato ven dun formulario anterior).
- Podemos crear o seguinte formulario:
<form action='Alta_Exemplares.php' method='post'> <?php for($cont=1;$cont<$_POST['num_exemplares'];$cont++){ echo "<input type='text' name='txtEstadoExemplar[]' />"; } ?> <input type='submit' value='Enviar' name='btnAltaExemplares' /> </form>
- Poderíamos enviar de vez os estados (roto,perfecto, pintado,...) de cada un dos exemplares a dar de alta (é un exemplo, loxicamente se queremos gardar ese tipo de dato sería mais conveniente utilizar un <select> cos diferentes estados.
- Lembrar que xa vimos anteriormente na wiki como enviar datos en forma de array.
- Ao igual que có if, podemos empregar outra sintaxe cando estamos a mesturar código php e código html.
- Este sería un exemplo de cómo facelo.
<?php for ($i = 0; $i < 10; $i++): ?> <p>Ítem <?php echo $i; ?></p> <?php endfor; ?>
Exercicios propostos
- Exercicio 1: Determinar se un número é positivo ou negativo. Emprega unha variable e dalle os diferentes valores. Debe amosar unha mensaxe diferente para cando é positivo, negativo ou igual a cero.
- Exercicio 2: Determina se dada unha contrasinal e un usuario, este pode entrar. Debes empregar dúas variables, unha para o usuario e outra para o password. Se o usuario non existe debe amosar unha mensaxe. Se o usuario existe e a contrasinal é incorrecta deberá indicalo. Se a contrasinal é correcta deberá indicar Acceso concedido.
- Exercicio 3: Contar ata X. Emprega unha variable para gardar o número ata o que ten que contar e amosa en cada liña Número: X dende 1 ata X
- Exercicio 4: Taboa de multiplicar. Emprega un bucle for para xerar a taboa de multiplicar do 5.
- Exercicio 5: Amosa o nome dunha froita en función dun número. Por exemplo, 1 => Mazá, 2 => Pera,....
- Exercicio 6: Partindo dunha variable cadea na que gardas un número, convirte dita cadea a número e comproba que dito número sexa superior a 0. En caso de que non o sexa, terá que incrementar o valor do número na cadea e volverá a facer a comprobación. Así continuamente ata que sexa superior a 0.
Solución Exercicios
- Exercicio 1: Determinar se un número é positivo ou negativo. Emprega unha variable e dalle os diferentes valores. Debe amosar unha mensaxe diferente para cando é positivo, negativo ou igual a cero.
<!DOCTYPE html> <html> <head> <title>Exercicio con if-else</title> </head> <body> <h1>Determinar se un número é positivo ou negativo</h1> <?php $numero = 10; // Podes cambiar este valor para probar diferentes números if ($numero > 0) { echo "O número $numero é positivo."; } elseif ($numero < 0) { echo "O número $numero é negativo."; } else { echo "O número é igual a 0."; } ?> </body> </html>
- Solución Exercicio 2: Determina se dada unha contrasinal e un usuario, este pode entrar. Debes empregar dúas variables, unha para o usuario e outra para o password. Se o usuario non existe debe amosar unha mensaxe. Se o usuario existe e a contrasinal é incorrecta deberá indicalo. Se a contrasinal é correcta deberá indicar Acceso concedido.
<!DOCTYPE html> <html> <head> <title>Exercicio con if-else</title> </head> <body> <h1>Determinar se un usuario ten acceso</h1> <?php // Datos del usuario existente $usuario_correcto = "usuario1"; $contrasena_correcta = "secreta123"; // Datos del usuario ingresado $usuario_ingresado = "usuario1"; // Cambia el usuario ingresado $contrasena_ingresada = "secreta1234"; // Cambia la contraseña ingresada // Comprobar si el usuario y la contraseña son correctos if ($usuario_ingresado == $usuario_correcto && $contrasena_ingresada == $contrasena_correcta) { echo "Acceso concedido. Benvido, $usuario_correcto."; } elseif ($usuario_ingresado == $usuario_correcto) { echo "Acceso denegado. A contrasinal é incorrecta."; } else { echo "Acceso denegado. O usuario non existe."; } ?> </body> </html>
- Solución Exercicio 3: Contar ata X. Emprega unha variable para gardar o número ata o que ten que contar e amosa en cada liña Número: X dende 1 ata X
<!DOCTYPE html> <html> <head> <title>Exemplo de bucle for en PHP</title> </head> <body> <h1>Contar ata un número específico</h1> <?php $numero_a_contar = 7; // Número hasta el cual se va a contar for ($i = 1; $i <= $numero_a_contar; $i++) { echo "Número: $i<br>"; } ?> </body> </html>
- Solución Exercicio 4: Taboa de multiplicar. Emprega un bucle for para xerar a taboa de multiplicar do 5.
<!DOCTYPE html> <html> <head> <title>Exemplo de bucle for en PHP</title> </head> <body> <h1>Taboa de multiplicar do 5</h1> <?php $numero = 5; for ($i = 1; $i <= 10; $i++) { $resultado = $numero * $i; echo "$numero x $i = $resultado<br>"; } ?> </body> </html>
- Solución Exercicio 5: Amosa o nome dunha froita en función dun número. Por exemplo, 1 => Mazá, 2 => Pera,....
<!DOCTYPE html> <html> <head> <title>Exemplo de switch en PHP</title> </head> <body> <h1>Nome da Fruta</h1> <?php $numeroFruta = 3; // Podes cambiar este valor para probar diferentes frutas switch ($numeroFruta) { case 1: echo "Mazá"; break; case 2: echo "Pera"; break; case 3: echo "Laranxa"; break; case 4: echo "Kiwi"; break; case 5: echo "Banana"; break; default: echo "Número de fruta non válido."; } ?> </body> </html>
- Solución Exercicio 6: Partindo dunha variable cadea na que gardas un número, convirte dita cadea a número e comproba que dito número sexa superior a 0. En caso de que non o sexa, terá que incrementar o valor do número na cadea e volverá a facer a comprobación. Así continuamente ata que sexa superior a 0.
<!DOCTYPE html> <html> <head> <title>Exemplo de bucle Do-While en PHP</title> </head> <body> <h1>Ingresar un número positivo</h1> <?php $numero = -1; // Inicializamos con un valor negativo para garantizar la ejecución del bucle al menos una vez // Simulamos una entrada de usuario (en un entorno real, puedes obtener esto de un formulario) echo "Por favor, ingrese un número positivo: "; $entrada_usuario = "-5"; // Cambia este valor para probar diferentes entradas do { printf("<br />Número ingresado:%s",$entrada_usuario); // Convertir la entrada del usuario a un número $numero = (int)$entrada_usuario; if ($numero <= 0) { echo "<br />El número ingresado no es válido. Debe ser positivo.\n"; $numero++; $entrada_usuario = strval($numero); } } while ($numero <= 0); echo "<br />Has ingresado un número positivo válido: $numero"; ?> </body> </html>
-- Ángel D. Fernández González -- (2023).