Apuntes PHP – Condicionales

Estructuras de control

En php contamos con las estructuras de control tradicionales, también conocidas como sentencias condicionales y que ya vimos en su momento en Java.

Este tipo de sentencias nos permitirán hacer que nuestros programas puedan “tomar decisiones”. Según los datos que vayamos recibiendo por parte de nuestros usuarios, lo habitual es que nuestros programas tengan que actuar de un modo u otro.

Por ejemplo, si hacemos un programa que pida por pantalla tu edad, y debe mostrar si eres menor o mayor de edad, debe poder analizar los valores y actuar en consecuencia.

Para ello, lo que haríamos sería una comparación y una estructura condicional “si es…”.

Ejemplo:

Edad: 19 años
¿19 es mayor o igual que 18? Sí. “Es mayor de edad”

Edad: 17 años
¿17 es mayor o igual que 18? No. “Es menor de edad”

Estas sentencias, condicionales se pueden obtener mediante dos formatos, (if y switch).

Existe una sintaxis alternativa para algunas estructuras como if, while, for o switch, consistente en cambiar la llave de apertura ({) por dos puntos (:) y la de cierre (}) por (endif;, endfor;, endwhile;…). Ejemplo:

<?php
    $nombre = "Manolo";
    if ($nombre == "Manolo"):
        echo "Mi nombre es $nombre";
    endif;
?>

Este código funcionaría exactamente igual que si hubiésemos puesto un if tradicional:

<?php
    $nombre = "Manolo";
    if ($nombre == "Manolo"){
        echo "Mi nombre es $nombre";
    };
?>

Sentencia if…. else

La sentencia if puede traducirse literalmente “si…”, expresando con ello en su lectura una condición. Durante el programa se presenta de la siguiente forma:

if (parametro1 condición parametro2) {
quiero que haga esto;
} else {
hará esto otro;
}

Con esta expresión, si la comprobación que hacemos entre paréntesis se cumple, se hace lo que aparece en la primera parte, si fuese falsa, se haría lo que corresponde a else.

Sentencia if

Aunque habitualmente, este es el formato más habitual de una expresión condicional también podríamos encontrarnos, que la parte del else no existe.

if (parametro1 condición parametro2) {
quiero que haga esto;
}

En este caso, lo que haría el programa es comprobar la condición del if, si se cumple, seguiría haciendo lo que aparece entre llaves, pero si no se cumple, pasaría al siguiente punto del programa, omitiendo la instrucción if.

Sentencia if… else if… else

En programación, también podemos realizar una expresión que incluya varias condiciones, en este caso, el programa iría leyendo por orden y ejecutaría la primera en la que se cumpla la condición, tras ello saldría de la estructura if y continuaría con el programa.

Pongo un ejemplo con algunos datos para que puedas entenderlo mejor:

if (A > B) {
A es mayor que B;
} else if (A > C) {
A es mayor que C;
} else if (B > C) {
B es mayor que C;
} else {
C es mayor que A y que B;
}

Con los siguientes datos, el funcionamiento sería así:
A= 50; B = 120; C = 500;

  1. Comprobamos si A es mayor que B, al ser falso, pasa a la siguiente instrucción.
  2. Comprobamos si A es mayor que C, al ser falso, pasa a la siguiente instrucción.
  3. Comprobamos si B es mayor que C, al ser falso, pasa a la siguiente instrucción.
  4. Al no haber más casos contemplados, mostraría el mensaje “C es mayor que A y que B”

Si modificamos y dejamos estos datos, el funcionamiento sería así:
A= 150; B = 120; C = 500;

  1. Comprobamos si A es mayor que B, al ser correcto, directamente mostraría el mensaje “A es mayor que B”, y aunque “C es mayor que A y B”, nunca llegaría a realizar esa comprobación, saliendo así de la estructura if.

Nota: también se puede escribir elseif, pero es recomendado el uso de else if.

Sentencia Switch

Esta expresión se utiliza para comparar el valor de una variable con unos valores muy concretos. Uno de sus usos más habituales es, por ejemplo, para la creación de un menú.

Para entendernos, el funcionamiento vendría a ser una cosa así:

variable opción

Menú:

  1. Muestra la fecha de hoy
  2. Muestra la hora actual
  3. Muestra el nombre de usuario
  4. Cierra el programa

Si el usuario elige la opción 1, el programa debería funcionar de forma diferente a si lo hiciese con la opción 2, etc.

En código, la forma de escribir esta estructura, sería la siguiente:

switch (variable) {
case 1:
mostraría la fecha de hoy
break;
case 2:
mostraría la hora actual
break;
case 3:
mostraría el nombre del usuario
break;
case 4:
cerraría el programa
break;

default:
haría una acción por defecto, por ejemplo, volver a pedir que introduzcas el valor.
break;
}

Como vemos, la estructura se divide en “casos”, si el valor de la variable es “1”, “2”, etc. y según el valor de la variable se ejecutan unas instrucciones. Una vez ejecutadas, observamos que debajo aparece la instrucción break; si esta no se introduce, el flujo del programa continuaría hacia abajo ejecutando el resto de instrucciones, con ella marcamos la salida del conjunto switch.

En caso de que el valor incluido, no corresponda con ninguno de los “casos“, se aplicaría la instrucción “default“.

Operadores de comparación

Para poder realizar la comparaciones debemos hacer usos de los operadores de comparación, por lo general son bastante intuitivos y similares a los que utilizamos en cualquier ecuación matemática, a excepción del == (igual), != (distinto), === (idéntico), <> (diferente), !== (no idéntico), <=> (nave espacial) y ?? (fusión de null).

$a == $bIgualTRUE si $a es igual a $b después de la manipulación de tipos.
$a === $bIdénticoTRUE si $a es igual a $b, y son del mismo tipo.
$a != $bDiferenteTRUE si $a no es igual a $b después de la manipulación de tipos.
$a <> $bDiferenteTRUE si $a no es igual a $b después de la manipulación de tipos.
$a !== $bNo idénticoTRUE si $a no es igual a $b, o si no son del mismo tipo.
$a < $bMenor queTRUE si $a es estrictamente menor que $b.
$a > $bMayor queTRUE si $a es estrictamente mayor que $b.
$a <= $bMenor o igual queTRUE si $a es menor o igual que $b.
$a >= $bMayor o igual queTRUE si $a es mayor o igual que $b.
$a <=> $bNave espacialUn integer menor que, igual a, o mayor que cero cuando $a es respectivamente menor que, igual a, o mayor que $b. Disponible a partir de PHP 7.
$a ?? $b ?? $cFusión de nullEl primer operando de izquierda a derecha que exista y no sea NULLNULL si no hay valores definidos y no son NULL. Disponible a partir de PHP 7.
Documentación con ejemplos

Operadores lógicos

Estos operadores nos sirven para trabajar con más de una condición a la vez, es decir, por ejemplo, si tenemos el número diez, y nuestro programa comprueba si el número es mayor de 5 y si es par, este y sería el denominado operador lógico.

$a and $bAnd (y)TRUE si tanto $a como $b son TRUE.
$a or $bOr (o inclusivo)TRUE si cualquiera de $a o $b es TRUE.
$a xor $bXor (o exclusivo)TRUE si $a o $b es TRUE, pero no ambos.
! $aNot (no)TRUE si $a no es TRUE.
$a && $bAnd (y)TRUE si tanto $a como $b son TRUE.
$a || $bOr (o inclusivo)TRUE si cualquiera de $a o $b es TRUE.
Documentación con ejemplos

Estos son los operadores que podremos utilizar en nuestras expresiones, el resultado de la expresión final será también “verdadero” o “falso”, aunque creo que resulta bastante obvio, analicemos algunos de sus resultados:

condición1 && condición2

Para que se devuelva el valor “verdadero”, ambas condiciones deben ser verdaderas

condición1 || condición2

Para que devuelva el valor “verdadero”, valdría con que una de las dos lo sea.

!condición

El operador de negación, devuelve el valor contrario al que sea el resultado habitual de la condición.