Estructuras de control en PHP

Estructuras de control en PHP

Para las estructuras de control, PHP posee las sentencias de control típicas de los lenguajes de alto nivel

Declaración de variables

A las variables en PHP no se les asigna un tipo predefinido

En PHP el tipo de las variables depende del valor que contengan las mismas en cada momento

Por tanto se realiza una conversión automática de tipos

PHP reconoce los siguientes tipos de valores:

  • Números

    enteros y reales

  • Valores booleanos

    true y false

  • Strings
  • Arrays

    tipo de datos que asocia valores con claves (como un mapa ordenado)

  • Iterables

    seudotipo introducido en PHP 7.1

    Acepta cualquier array u objeto que implemente la interfaz Traversable

  • Recursos

    referencia a un recurso externo

  • El valor null
  • Objetos

    Creados por el programador o predefinidos por el lenguaje

Dado que no existen tipos de variables a priori, no hemos de especificar el tipo de variable cuando la declaramos

La declaración de variables se hace anteponiendo la palabra reservada $ al nombre de la variable

Es posible asignarle el valor cuando la declaramos

La sentencia if

La sentencia if tiene la forma:

Los paréntesis asociados que delimitan la condición no son opcionales

En caso de que la condición sea verdadera se ejecutará la instrucción 1; en caso contrario se ejecuta si existe la instrucción 2

El uso de la sentencia else es opcional, por eso en la definición se han utilizado los corchetes

Si se omite, sólo se tendrá en cuenta el bloque de instrucciones cuando la condición sea verdadera

Un bloque de instrucciones es un conjunto de instrucciones delimitadas por llaves

Las llaves después de la sentencia if no son obligatorias

Si se omiten y la condición era verdadera, se ejecutará la siguiente instrucción

En caso contrario, se ejecutará la subsiguiente instrucción, de forma independiente al estado de la condición

De este modo, la omisión de las llaves después de la sentencia if nos permitirá escribirlo todo en una única línea terminada en ;

La sentencia elseif

También podemos utilizar sentencias if anidades mediante la sentencia elseif

Las sentencias elseif funcionan igual que una sentencia if

Pero sólo se ejecutarán en caso de que la condición de la sentencia if fuese falsa

La sentencia switch

Hace que se seleccione un grupo de sentencias entre varias posibles

Es una alternativa al uso de sentencias elseif anidadas

Su sintaxis es:

La expresión entre paréntesis del switch debe ser entera o string

Su resultado se comparará con los distintos valores del case

Si coincide con uno de ellos se pasará a la instrucción siguiente al case con dicho valor y se seguirán ejecutando las instrucciones consecutivas hasta encontrar una instrucción break o alcanzar las llaves de cierre del switch

En caso de que el resultado de la expresión no coincida con ningún valor se pasará la ejecución a la instrucción siguiente de la etiqueta default, si la hubiera, y se continuará como un case

Los valores en los case pueden ser una expresión constante

No puede haber dos case con el mismo valor

A diferencia de otros lenguajes, la sentencia continue se aplica a switch y actúa de manera similar a break

Si se tiene un switch dentro de un bucle y se desea continuar a la siguiente iteración del ciclo exterior, se utilizará continue 2

Es posible utilizar un punto y coma en lugar de dos puntos después de un case

Se seguirán ejecutando las instrucciones consecutivas normalmente hasta encontrar una instrucción break o alcanzar las llaves de cierre del switch

La sentencia match

Fue añadida en la versión PHP 8.0.

Hace que se seleccione un grupo de sentencias entre varias posibles

Es una alternativa al uso de sentencias elseif anidadas y es similar a la sentencia switch

De forma similar a una sentencia switch, una expresión match tiene una expresión de sujeto que se compara con múltiples alternativas

A diferencia de switch, se evaluará a un valor muy parecido al de las expresiones ternarias

Pero usando una comprobación de identidad (===) en lugar de una comprobación de igualdad débil (==)

Retorna un valor

Los valores posteriores ya no se procesan, como se hace en las sentencias switch

No es posible ejecutar bloques de código en cada condición, como se hace en las sentencias switch

La expresión utilizada en el match, debe ser completa, si no es manejada por ningún case se lanzará la excepción UnhandledMatchError

Dentro del mismo caso puede contener varias expresiones separadas por una coma, es similar a un OR lógico

Un caso especial es el patrón default, que permite hacer coincidir cualquier cosa que no se haya hecho coincidir previamente

Si se utilizan varios patrones default lanzarán la excepción E_FATAL_ERROR

Su sintaxis es:

Vamos a ver como quedaría el ejemplo sobre cervezas que vimos con switch, ahora con match:

La sentencia while

La sentencia while tiene la forma

Los paréntesis no son opcionales

Si se cumple la condición, se ejecuta la instrucción o el bloque de instrucciones y se repite el proceso hasta que deje de cumplirse la condición

La sentencia do

La sentencia do tiene la forma

Es muy similar a la sentencia while, excepto que la condición va después de la instrucción o bloque de instrucciones

Con lo que al menos se ejecutan una vez aunque la condición sea falsa

La sentencia for

En cuando a dicha sentencia, en PHP podemos distinguir dos variantes:

  • El bucle for "clásico"
  • El bucle foreach

El bucle for "clásico"

Este bucle, tiene una sintaxis muy parecida a la de C / C++

En esta sintaxis:

Inicialización crea la variable contador y le da un valor inicial

Condición se debe cumplir para que el bucle se ejecute

Depende de la variable índice

Expresión actualiza el valor de la variable índice

El equivalente de esta expresión con while es:

El bucle foreach

Este bucle, tiene una sintaxis muy parecida al for-each de Java

Itera una variable $var sobre todas las propiedades de un objeto $obj que se le pasa

Así para cada valor de $var se ejecutaran las sentencias del bucle

Por lo tanto, el bucle tendrá tantas iteraciones como propiedades el objeto y en cada iteración la variable tendrá el valor de la propiedad del objeto correspondiente con dicha iteración

Su sintaxis es:

La sentencia break

La sentencia break se puede colocar dentro de un bucle o bucles anidados

Cuando se ejecuta la sentencia break se abandona el bucle más interno

A todos los efectos la sentencia break actúa como un salto a la instrucción siguiente al bucle en el que se ejecuta

La sentencia continue

La sentencia continue, no abandona el bucle si no que hace que se ejecute la siguiente iteración

En el bucle while la ejecución del continue hace que el flujo del programa salte a la condición

En el bucle for la ejecución del continue hace que se ejecute la expresión de incremento, para después continuar normalmente con la condición

Es decir, la ejecución del continue evita que se ejecute el resto del cuerpo del bucle

Si se tiene un switch dentro de un bucle y se desea continuar a la siguiente iteración del ciclo exterior, se utilizá continue 2