> Manuales > Manual de PHP

Presentamos una de las herramientas principales usadas para controlar el flujo de nuestros programas en PHP: Los condicionales IF.

Control del flujo en PHP: Condiciones IF

En este artículo vamos a conocer las estructuras condicionales con la sentencia "if" que es la más básica existente para la toma de decisiones en los programas.

Qué son las estructuras de control

Antes de comenzar vamos a ver brevemente qué son las estructuras de control de flujo o simplemente estructuras de control, que son componentes esenciales de la programación imperativa.

La programación exige en muchas ocasiones de estructuras de control de flujo para poder realizar los algoritmos. Existen dos tipos de estructuras de control básicas:

Estructuras de control condicionales

En este artículo nos vamos a centrar en la estructura condicional, que es la más básica y realmente resulta muy sencilla de aprender.

Como hemos dicho, las estructuras condicionales nos permiten tomar decisiones. Esas decisiones se representan en base a expresiones compuestas por operadores condicionales, los cuales ya introdujimos en el capítulo dedicado a operadores en PHP.

En función de la evaluación de las expresiones condicionales se realiza la toma de decisiones. Enseguida veremos ejemplos y quedará más claro, pero para ir concretando, un caso de uso de un condicional, podría ser un script que ejecute una secuencia diferente de instrucciones en función del día de la semana en el que nos encontramos.

Este tipo de acciones pueden ser llevadas a cabo gracias a varias instrucciones que están presentes en la mayoría de los lenguajes. En este capítulo describiremos una de las que permite PHP que es la sentencia if.

Para evitar el complicarnos demasiado nos estamos limitando a los condicionales if, que son los más importantes. Pero por si a alguien le interesa, en PHP también existe la sentencia switch y el operador ternario para tomar decisiones. Los veremos más adelante.

Las condiciones if

Cuando queremos que el programa, llegado a un cierto punto, tome un camino concreto en determinados casos y otro diferente si las condiciones de ejecución difieren, nos servimos del conjunto de instrucciones if, else y elseif. La estructura de base de este tipo de instrucciones es la siguiente:

Bloque if

Vamos a verlas por partes. Primero la estructura condicional más simple, que solamente usa la instrucción if.
if (condición)
{
   Instrucción 1;
   Instrucción 2;
   ...
}

Este ejemplo de pseudo-código quiere mostrar cómo se toma una decisión en un código. Simplemente se evalua la expresión condición. Si esa evaluación fuese correcta, entonces se ejecutan las instrucciones que hay entre las llaves: Instrucción 1, Instrucción 2 y todas las que hubiera.

Bloque else

Pero además, la instrucción if puede acompañarse por un bloque else para indicar qué se debe realizar en el caso que la expresión de la condición no sea evaluada positivamente.

if (condición)
{
   Instrucción 1;
   Instrucción 2;
   ...
}
else
{
   Instrucción A;
   Instrucción B;
   ...
}

Llegados a este punto, el programa verificará el cumplimiento o no de la condición. Si la condición es cierta las instrucciones 1 y 2 serán ejecutadas. De lo contrario (else), las instrucciones A y B serán llevadas a cabo.

Bloque elseif

El conjunto de instrucciones de la familia del if se completa con la instrucción elseif, que permite en una sola línea introducir una condición adicional. Es decir, en lugar de dos caminos, positivo y negativo, podemos introducir nuevos caminos que dependan de nuevas condiciones.

Este tipo de instrucción hace que nuestra estructura sea ligeramente más compleja, aunque definitivamente su sintaxis es muy similar a la que acabamos de ver:

if (condición1)
{
   Instrucción 1;
   Instrucción 2;
   ...
}
elseif (condición2)
{
   Instrucción A;
   Instrucción B;
   ...
}
else
{
   Instrucción X
   ...
}

Anidación de condicionales

Esta estructura de base puede complicarse un poco más si tenemos cuenta que no necesariamente todo es blanco o negro y que muchas posibilidades pueden darse. Es por ello que otras condiciones pueden plantearse dentro de la condición principal.

Así que, en la práctica en los programas muchas veces tenemos condicionales anidados, que tendrían una estructura del siguiente tipo:

if (condición1)
{
   Instrucción 1;
   Instrucción 2;
   ...
}
else
{
   if (condición2)
   {
      Instrucción A;
      Instrucción B;
      ...
   }
   else
   {
      Instrucción X
      ...
   }
}

De este modo podríamos introducir tantas condiciones como queramos dentro de una condición principal, llegando a cualquier nivel que fuera necesario en nuestros programas.

Aunque en teoría podemos realizar anidaciones de condicionales en cualquier nivel, se intenta siempre no llevar a niveles de anidación demasiado grandes, dado que dificulta la lectura del código. Para evitar realizar muchos niveles nos podemos apoyar en funciones que tengan el código de una rama del if o de otra. Esto lo veremos más adelante cuando sean necesarios algoritmos más complicados.

Ejemplo práctico de condicionales en PHP

El uso de esta herramienta resultará claro con un poco de práctica. Pongamos un ejemplo sencillo de utilización de condiciones.

En este caso vamos comprobar con PHP si estamos en el primer día del mes, para luego mostrar un mensaje si eso ocurre.

Para poder saber el día del mes podemos utilizar la función date(). Esta función es muy básica y existen otras más complejas para trabajar con fechas en PHP, pero de ella podemos extraer mucha información del día actual.

A continuación puedes ver un ejemplo de condicional:

<?php
$diaActual = date('j');  // Obtiene el día del mes sin ceros iniciales (1 a 31)

if ($diaActual == 1) {
    echo "¡Hoy es el primer día del mes!";
}
?>

Estamos usando la función date('j') que nos da el día del mes sin ceros iniciales (por lo que obtendrás valores del 1 al 31). En el condicional se verifica si este día es el número 1, y si lo es, muestra el mensaje indicado.

Si quisieras mostrar un mensaje distinto en el caso que no sea el primer día del mes podrías usar el bloque else. Un ejemplo sería el siguiente:

<?php
$diaActual = date('j');  // Obtiene el día del mes sin ceros iniciales (1 a 31)

if ($diaActual == 1) {
    echo "¡Hoy es el primer día del mes!";
} else {
	echo "No es el primer día del mes, sino el día $diaActual";
}
?>

Ahora vamos a ver otro ejemplo de condicional un poco más complejo. El siguiente programa permitiría detectar la lengua empleada por el navegador y visualizar un mensaje en dicha lengua.

<HTML>
<HEAD>
<TITLE>Detector de idioma</TITLE>
</HEAD>
<BODY>
<?php
//Antes de nada introducimos mensajes en forma de variables
$espanol = "Hola";
$ingles = "Hello";
$frances = "Bonjour";

//Ahora leemos del navegador cuál es su lengua oficial
$idioma = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2);

//Formulamos las posibilidades que se pueden dar
if ($idioma == "es") {
  echo "$espanol";
} elseif ($idioma=="fr") {
  echo "$frances";
} else {
  echo "$ingles";
}
?>
</BODY>
</HTML>

Para poder ver el funcionamiento de este script y comprobar que a veces se va por una rama y a veces por otra sería necesario tener navegadores configurados con distintos idiomas. A veces los navegadores permiten cambiar el idioma preferido, lo cual puede ser realizado a partir del menú de opciones del navegador. En el peor de los casos al menos podremos ver que nos muestra el saludo en el idioma que tengamos en nuestro navegador.

Para leer la lengua aceptada por el navegador lo que hacemos es definir una variable ($idioma) y, mediante la función substr, recogemos las dos primeras letras del código correspondiente al idioma aceptado por el navegador ($_SERVER["HTTP_ACCEPT_LANGUAGE"]).

La tercera parte de script se encarga de ver si el navegador está en español (es), francés (fr) o en cualquier otro idioma que no sea ninguno de estos dos y de imprimir el mensaje que proceda en cada caso.

Es muy importante notar que, cuando se trata de comparar variables, ponemos un doble igual "==" en lugar de un simple "=". Recuerda siempre que el doble igual es para comparar y el igual simple se usa exclusivamente para asignar valores a variables.

Referencia: Hemos publicado un vídeo para mostrar la creación y el funcionamiento de las estructuras IF: Estructuras de control, Vídeo 1: condicional if

Espero que te hayan quedado claros los condicionales en PHP. Claro que se necesita un poco de práctica para dominarlos, pero no te preocupes porque veremos más ejemplos a lo largo del Manual de PHP y en numerosos talleres de PHP. En el siguiente artículo vamos a introducir las estructuras de control para repeticiones.

Rubén Alvarez

Rubén es doctor en química y programador principalmente en sus ratos libres con...

Manual