Diferencia entre revisiones de «PHP Estruturas de control»
Ir a la navegación
Ir a la búsqueda
| (No se muestran 4 ediciones intermedias del mismo usuario) | |||
| Línea 7: | Línea 7: | ||
* Sintaxe: | * Sintaxe: | ||
| − | ::<syntaxhighlight lang="php" | + | ::<syntaxhighlight lang="php" enclose="div" highlight="" > |
if (expr) | if (expr) | ||
sentenza | sentenza | ||
| Línea 16: | Línea 16: | ||
Exemplo de código: | Exemplo de código: | ||
| − | ::<syntaxhighlight lang="php" | + | ::<syntaxhighlight lang="php" enclose="div" highlight="" > |
<?php | <?php | ||
if ($a > $b) { // Se $a é maior que $b executa dita sentenza | if ($a > $b) { // Se $a é maior que $b executa dita sentenza | ||
| Línea 28: | Línea 28: | ||
Exemplo de código: | Exemplo de código: | ||
| − | ::<syntaxhighlight lang="php" | + | ::<syntaxhighlight lang="php" enclose="div" highlight="2,5" > |
<?php | <?php | ||
if ($a > $b) { | if ($a > $b) { | ||
| Línea 41: | Línea 41: | ||
* Pódense anidar if´s de forma indefinida. | * Pódense anidar if´s de forma indefinida. | ||
Exemplo de código: | Exemplo de código: | ||
| − | ::<syntaxhighlight lang="php" | + | ::<syntaxhighlight lang="php" enclose="div" highlight="2,4" > |
<?php | <?php | ||
if ($a > $b) { | if ($a > $b) { | ||
| Línea 53: | Línea 53: | ||
| + | |||
| + | * É 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: | ||
| + | ::<syntaxhighlight lang="php" enclose="div" highlight="1" > | ||
| + | <?php if ($a > $b): ?> | ||
| + | <div>A é maior que b</div> | ||
| + | <?php endif; ?> | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | : Esta sintaxe se emprega cando estamos a mesturar código php e html, quedando moito máis claro. | ||
| + | |||
| + | <br /> | ||
=== else === | === else === | ||
| Línea 60: | Línea 72: | ||
Exemplo de código: | Exemplo de código: | ||
| − | ::<syntaxhighlight lang="php" | + | ::<syntaxhighlight lang="php" enclose="div" highlight="2,4" > |
<?php | <?php | ||
if ($a > $b) { | if ($a > $b) { | ||
| Línea 71: | Línea 83: | ||
| + | * É 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: | ||
| + | ::<syntaxhighlight lang="php" enclose="div" highlight="1,3,5" > | ||
| + | <?php if ($a > $b): ?> | ||
| + | <div>A é maior que b</div> | ||
| + | <?php else: ?> | ||
| + | <div>A é menor que b</div> | ||
| + | <?php endif; ?> | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | : Esta sintaxe se emprega cando estamos a mesturar código php e html, quedando moito máis claro. | ||
| + | |||
| + | |||
| + | |||
| + | <br /> | ||
=== elseif | else if === | === elseif | else if === | ||
*<u>Nota:</u> Esta información está baseada na que se atopa na [http://php.net/manual/es/control-structures.elseif.php web de php]. | *<u>Nota:</u> Esta información está baseada na que se atopa na [http://php.net/manual/es/control-structures.elseif.php web de php]. | ||
| − | * As dúas formas (' | + | * As dúas formas ('elseif' 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. | * 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. | ||
| Línea 81: | Línea 108: | ||
Exemplo de código: | Exemplo de código: | ||
| − | ::<syntaxhighlight lang="php" | + | ::<syntaxhighlight lang="php" enclose="div" highlight="2,4" > |
<?php | <?php | ||
if ($a > $b) { | if ($a > $b) { | ||
| Línea 95: | Línea 122: | ||
<br /> | <br /> | ||
| + | |||
== switch == | == switch == | ||
| Línea 103: | Línea 131: | ||
Exemplo de código: | Exemplo de código: | ||
| − | ::<syntaxhighlight lang="php" | + | ::<syntaxhighlight lang="php" enclose="div" highlight="2,4" > |
<!DOCTYPE html> | <!DOCTYPE html> | ||
<html> | <html> | ||
| Línea 144: | Línea 172: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | |||
| + | == match == | ||
| + | |||
| + | Máis información en: https://www.php.net/manual/es/control-structures.match.php | ||
| + | |||
| + | * Ven ser coma un switch pero sen necesidade e empregar break. Fai unha comparación estricta cos valores. | ||
| + | : Por exemplo: | ||
| + | |||
| + | ::<syntaxhighlight lang="php" enclose="div"> | ||
| + | $mensaxe = match ($numeroDia) { | ||
| + | 1 => 'Luns', | ||
| + | 2 => 'Martes', | ||
| + | 3 => 'Mércores', | ||
| + | 4 => 'Xoves', | ||
| + | 5 => 'Venres', | ||
| + | 6 => 'Sábado', | ||
| + | 7 => 'Domingo', | ||
| + | default => 'Día incorrecto', | ||
| + | }; | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
== while == | == while == | ||
| Línea 189: | Línea 241: | ||
: Sairá como resultado os números do 1 ata o 10. | : 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. | ||
| + | ::<syntaxhighlight lang="php" enclose="div" highlight="2,3" > | ||
| + | <ul> | ||
| + | <?php while ($condicion): ?> | ||
| + | // código | ||
| + | <?php endwhile; ?> | ||
| + | </ul> | ||
| + | </syntaxhighlight> | ||
== do-while == | == do-while == | ||
| Línea 337: | Línea 399: | ||
| + | |||
| + | * 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. | ||
| + | |||
| + | ::<syntaxhighlight lang="php" enclose="div" highlight="1,3" > | ||
| + | <?php for ($i = 0; $i < 10; $i++): ?> | ||
| + | <p>Ítem <?php echo $i; ?></p> | ||
| + | <?php endfor; ?> | ||
| + | </syntaxhighlight> | ||
== Exercicios propostos == | == Exercicios propostos == | ||
| Línea 356: | Línea 427: | ||
* '''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. | * '''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. | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
Revisión actual del 15:56 13 sep 2026
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:
if (expr) 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:
<?php if ($a > $b) { // Se $a é maior que $b executa dita sentenza echo "a é maior b"; } ?>
- 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:
<?php if ($a > $b) { echo "a é maior b"; $b = $a; } ?>
- É necesario que a condición estea entre parénteses: (expr).
- Pódense anidar if´s de forma indefinida.
Exemplo de código:
<?php if ($a > $b) { echo "a é maior b"; if ($a > $c) { echo "a é maior que c"; } } ?>
- É 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:
<?php if ($a > $b): ?> <div>A é maior que b</div> <?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:
<?php if ($a > $b) { echo "a é maior que b"; } else { echo "a é menor ou igual que b"; } ?>
- É 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:
<?php if ($a > $b): ?> <div>A é maior que b</div> <?php else: ?> <div>A é menor que b</div> <?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 ('elseif' 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:
<?php if ($a > $b) { echo "a é maior que b"; } elseif ($a == $b) { echo "a é igual a b"; } else { echo "a é menor que b"; } ?>
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:
<!DOCTYPE html> <html> <head> <title>Exemplo de switch en PHP</title> </head> <body> <h1>Día da Semana</h1> <?php $numeroDia = 3; // Podes cambiar este valor para probar diferentes días switch ($numeroDia) { case 1: echo "Hoxe é luns."; break; case 2: echo "Hoxe é martes."; break; case 3: echo "Hoxe é mércores."; break; case 4: echo "Hoxe é xoves."; break; case 5: echo "Hoxe é venres."; break; case 6: echo "Hoxe é sábado."; break; case 7: echo "Hoxe é domingo."; break; default: echo "Número de día non válido."; } ?> </body> </html>
match
Máis información en: https://www.php.net/manual/es/control-structures.match.php
- Ven ser coma un switch pero sen necesidade e empregar break. Fai unha comparación estricta cos valores.
- Por exemplo:
$mensaxe = match ($numeroDia) { 1 => 'Luns', 2 => 'Martes', 3 => 'Mércores', 4 => 'Xoves', 5 => 'Venres', 6 => 'Sábado', 7 => 'Domingo', default => 'Día incorrecto', };
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).