Archivo de la categoría: Página Web

Una página web es un documento o información electrónica capaz de contener texto, sonido, vídeo, programas, enlaces, imágenes, etc

Adaptada para la llamada World Wide Web (WWW) y que puede ser accedida mediante un navegador web

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

Funciones en PHP

Funciones en PHP

Para definir funciones disponemos de la instrucción function

Después de esta palabra reservada se coloca el nombre de la función seguido de una lista de argumentos delimitados por paréntesis y separados por comas

Argumentos

El paso de argumentos es opcional y en algunos casos puede haber funciones que carezcan de ellos

Por ejemplo la función phpinfo no tiene argumentos

Esta función nos muestra información referente al módulo PHP que estamos usando y siempre devuelve el valor entero 1

Tipo de los argumentos

A partir de PHP 7 se puede declarar de forma opcional el tipo de los argumentos pasados a la función

Admite los tipos string, int, float, array, callable y clases

Si el usuario de la función los introduce mal o utiliza otro tipo de dato, PHP devolverá un mensaje de error indicándolo

Argumentos con valor por defecto

En ocasiones necesitamos que un argumento tenga un valor, para evitar un error, aunque el usuario de la función no lo introduzca

Hay que tener en cuenta, que los argumentos con valor por defecto pasan a ser opcionales y que todos los argumentos a la izquierda del primer valor por defecto, son obligatorios

Argumentos por valor o por referencia

Cuando pasamos un valor a una función, aunque lo modifiquemos, al salir de la función conservará su valor original

Esta es la situación por defecto y se denomina que es un argumento por valor

Ya que se utiliza una copia en memoria de la variable y cuando se sale de la función, esa copia de la variable se destruye

En el caso de que quisiéramos que los cambios realizados en el valor de la variable se conservarán después de salir de la función, deberemos usar el símbolo & delante del nombre de la variable

A esta situación se denomina que es un argumento por referencia

Ya que se utiliza una referencia a la variable en memoria, trabajando directamente sobre la variable y cuando se sale de la función, todos los cambios permanecen

Hasta PHP 5.0.5 era posible indicar que una función era por referencia usando el símbolo & delante del nombre de la función

Sin embargo, a partir de PHP 5.3.0 pasaría a indicar con un mensaje call-time pass-by-reference que su uso estaba obsoleto

A partir de PHP 5.4.0 fue totalmente eliminado y actualmente produce un error fatal

Es decir, sólo puede utilizarse el símbolo & al pasar argumentos, nunca en el nombre de la función

Sólo podemos pasar por referencia:

  • Variables
  • Referencias devueltas desde funciones

La sentencia return

La sentencia return es la que permite devolver el resultado de una función

A partir de PHP 7 se puede declarar de forma opcional el tipo devuelto por la función

Admite los tipos string, int, float, array, callable y clases

Para declarar el tipo se escribirá el símbolo : después de los paréntesis que siguen a los argumentos y antes de la llave de inicio {

Funciones predefinidas por el lenguaje

Funciones de visualización

Echo

La función echo sirve para enviar la salida de sus argumentos al navegador

Lo hemos usado continuamente en ejemplos previos

Tiene el formato:

Tiene las siguientes particularidades:

  • Podemos prescindir de los paréntesis en su uso, ya que son opcionales

  • Convierte toda la información a string antes de enviarla al navegador

  • Si utilizamos varios echo seguidos, nos encontraremos que el resultado lo concatena en la misma línea

    Para solucionarlo deberemos utilizar la etiqueta HTML <br/> para que salte de línea

  • Si utilizamos varios echo seguidos, nos encontraremos que el resultado no añade un espacio al final y por tanto, el contenido podría mostrar textos incomprensibles, al carecer de ese espacio

    Para solucionarlo deberemos añadir un espacio al final del primer echo o al principio del siguiente echo

printf

La función printf sirve para enviar la salida de sus argumentos al navegador con un formato

Tiene el formato:

Para formatear un texto deberemos introducir los siguientes caracteres de formato precedidos por el símbolo %:

Caracteres de formato para texto
Caracter Descripción
%

Carácter de porcentaje literal

No requiere un argumento

b

El argumento es tratado como un valor de tipo integer y presentado como un número binario

c

El argumento es tratado como un valor de tipo integer y presentado como el carácter con ese valor ASCII

d

El argumento es tratado como un valor de tipo integer y presentado como un número decimal (con signo)

e

El argumento es tratado con notación científica (por ejemplo 1.2e+2)

El especificador de precisión indica el número de dígitos después del punto decimal a partir de PHP 5.2.1.

En versiones anteriores, se tomaba como número de dígitos significativos (menos uno)

E

Como %e pero utiliza la letra mayúscula (por ejemplo 1.2E+2)

f

El argumento es tratado como un valor de tipo float y presentado como un número de punto flotante (considerando la configuración regional)

F

El argumento es tratado como un valor de tipo float y presentado como un número de punto flotante (sin considerar la configuración regional)

Disponible desde PHP 4.3.10 y PHP 5.0.3.

g

Igual que %e y %f

G

Igual que %E y %f

o

El argumento es tratado como un valor de tipo integer y presentado como un número octal

s

El argumento es tratado y presentado como un string

u

El argumento es tratado como un valor de tipo integer y presentado como un número decimal sin signo

x

El argumento es tratado como un valor de tipo integer y presentado como un número hexadecimal (con las letras en minúsculas)

X

El argumento es tratado como un valor de tipo integer y presentado como un número hexadecimal (con las letras en mayúsculas)

sprintf

La función sprintf sirve para asignar a sus argumentos, de forma formateada, la variable de retorno

Tiene el mismo formato que printf y admite los mismos formatos

print_r

La función print_r sirve para enviar la salida de sus argumentos al navegador, mostrando información entendible por las personas sobre los argumentos

Es útil para poder depurar nuestro código

Tiene el siguiente formato:

Podemos usarlo para ver el contenido completo de un array

Funciones para cadenas

Vamos a ver algunas de las funciones para cadenas de uso más cotidiano

Si necesitas más, la lista completa la puedes encontrar en el manual de PHP

Mayúsculas y minúsculas

La función strtoupper devuelve una copia de la cadena en mayúsculas

La función strtolower devuelve una copia de la cadena en minúsculas

Extraer cadena

La función substr sirve para extraer una subcadena de la cadena que le pasamos como argumento

Tiene el siguiente formato:

Dónde $start es la posición de inicio de la subcadena y $length la longitud que tendrá la subcadena

Puede ser útil cuando necesitamos extraer una palabra de un texto y conocemos previamente su posición y su longitud

Hay que tener en cuenta que la posición $start debe empezar en 0

Longitud de la cadena

La función strlen sirve para contar la longitud de la cadena

Tiene el siguiente formato:

Retomando la cadena del ejemplo anterior

Posición de un carácter en la cadena

La función strpos sirve para encontrar la posición de un carácter concreto en la cadena

Tiene el siguiente formato:

Dónde encontramos la aguja ($needle, es el carácter a buscar) en el pajar ($haystack, es la cadena en la que buscamos) y $offset, que es opcional, es el número inicial en el que se empieza a buscar

Hay que tener en cuenta que la posición inicial empieza en cero

A no ser que especifiquemos el valor de $offset

Encontrar un texto

La función strstr sirve para encontrar la primera aparición de una cadena

Tiene el siguiente formato:

Es muy similar a substr, pero nos ahorra el tener que usar strpos de forma intermedia

Funciones para matrices

Vamos a ver algunas de las funciones para matrices de uso más cotidiano

Si necesitas más, la lista completa la puedes encontrar en el manual de PHP

Contar el número de elementos

La función count sirve para contar el número total de elementos

Tiene el siguiente formato:

De forma opcional podemos utilizar el argumento $mode que por defecto utiliza el valor COUNT_NORMAL (cuenta los elementos secuencialmente) y para arrays multidimensionales COUNT_RECURSIVE (cuenta los elementos de forma recursiva, es decir, recorre todos los arrays multidimensionales y suma el total de elementos)

Buscar un valor en la matriz

Comprobar si un valor existe

La función in_array sirve para comprobar si un valor existe dentro de una matriz

Tiene el siguiente formato:

Dónde encontramos la aguja ($needle, es el carácter a buscar) en el pajar ($haystack, es la cadena en la que buscamos) y $strict, que es opcional, si es TRUE comprobará los tipos de $needle en $haystack

Si $needle es un string, la comparación se realiza considerando las mayúsculas ó minúsculas

Encontrar el primer valor

La función array_search sirve para encontrar el primer valor, si existe, dentro de una matriz

Tiene el siguiente formato:

Dónde encontramos la aguja ($needle, es el carácter a buscar) en el pajar ($haystack, es la cadena en la que buscamos) y $strict, que es opcional, si es TRUE comprobará los tipos de $needle en $haystack

Si $needle es un string, la comparación se realiza considerando las mayúsculas ó minúsculas

Hay que tener cuidado con los valores devueltos por esta función porque puede devolver el valor booleano FALSE, pero también puede devolver un valor no booleano que se evalúa como FALSE

En versiones anteriores a PHP 4.2.0 devolvía NULL en caso de fallo, en lugar de FALSE

A partir de PHP 5.3.0 devuelve NULL si se le pasan parámetros inválidos

Formatos de fecha

PHP no dispone de un tipo para fechas

Para trabajar con fechas utilizar strings formateados con marcas de tiempo al estilo de UNIX

Estas marcas de tiempo son un valor de entero medido en segundos que empiezan a contar a partir del 1 de Enero de 1970

Marcas de tiempo

Para obtener la marca de tiempo actual podemos usar la función time que tiene el siguiente formato:

El valor obtenido es fácil de manipular, ya que podemos sumarle múltiplos:

  • de 3600 para añadirle horas
  • de 86400 para añadirle días
  • de 604800 para añadirle semanas

Cadena con formato

También podemos usar una cadena de formato para trabajar con fechas usando la función date que tiene el siguiente formato:

Donde $format es el cadena con el formato que queremos usar, $timestamp, que es opcional y por defecto se toma la función time, es una marca de tiempo UNIX

Para formatear una fecha deberemos introducir los siguientes caracteres de formato:

Caracteres de formato de fechas
Caracter Descripción
d

Día del mes, 2 dígitos con ceros iniciales

D

Cadena para el día, tres letras

j

Día del mes sin ceros iniciales

l (L minúscula)

Cadena para el día de la semana

N

Representación numérica ISO-8601 del día de la semana

Añadido en PHP 5.1.0.

S

Sufijo ordinal en inglés para el día del mes, 2 caracteres

w

Representación numérica del día de la semana

z

El día del año (comenzando por 0)

W

Número de la semana del año ISO-8601, las semanas comienzan en lunes

F

Una representación textual completa de un mes, como January o March

m

Representación numérica de una mes, con ceros iniciales

M

Una representación textual corta de un mes, tres letras

n

Representación numérica de un mes, sin ceros iniciales

t

Número de días del mes dado

L

Si es un año bisiesto

o

Año según el número de la semana ISO-8601

Esto tiene el mismo valor que Y, excepto que si el número de la semana pertenece al año anterior o siguiente, se usa ese año en su lugar

Añadido en PHP 5.1.0.

Y

Una representación numérica completa de un año, 4 dígitos

y

Una representación de dos dígitos de un año

a

am o pm en minúsculas

A

am o pm en mayúsculas

B

Hora Internet

g

Formato de 12 horas de una hora sin ceros iniciales

G

Formato de 24 horas de una hora sin ceros iniciales

h

Formato de 12 horas de una hora con ceros iniciales

H

Formato de 24 horas de una hora con ceros iniciales

i

Minutos con ceros iniciales

s

Segundos con ceros iniciales

u

Microsegundos

Añadido en PHP 5.2.2.

date() siempre generará 000000 al tomar un parámetro de tipo integer, mientras que DateTime::format() admite microsegundos si el DateTime fue creado con microsegundos

v

Milisegundos

Añadido en PHP 7.0.0.

La misma observación que para u

e

Identificador de zona horaria

Añadido en PHP 5.1.0.

I (i mayúscula)

La fecha está en horario de verano o no

O

Diferencia de la hora de Greenwich (GMT) en horas

P

Diferencia con la hora de Greenwich (GMT) con dos puntos entre horas y minutos

Añadido en PHP 5.1.3

T

Abreviatura de la zona horaria

Z

Índice de la zona horaria en segundos

El índice para zonas horarias al oeste de UTC siempre es negativo, y para aquellas al este de UTC es siempre positivo

c

Fecha ISO 8601

Añadido en PHP 5

r

Fecha con formato RFC 2822

U

Segundos en formato UNIX (1 de Enero del 1970 00:00:00 GMT)

Obtener una fecha desde una cadena

Usando un delimitador

A partir de una cadena podemos recoger una fecha usando la función explode que tiene el siguiente formato:

Donde $delimiter es el carácter usado para delimitar los valores, $string la cadena que contiene la fecha que queremos manipular y $limit un valor opcional cuyo valor por defecto es 1, que indica el máximo de valores devueltos

Si $limit es negativo se devolverán todos los valores eliminando el valor de $limit a partir del final

Y si es 0 se tratará como 1

Y después usaremos la función mktime para crear la marca de tiempo de tipo UNIX, que tiene el siguiente formato:

Donde $hour es la hora, $minute son los minutos, $second, los segundos, $month es el mes, $day es el día, $year es el año y $is_dst es el horario de verano o no (-1 si no lo es)

Todos los parámetros son opcionales, en caso de no introducir ninguno, se tomará el resultado de la función time

A partir de 5.1, cuando se hace la llamada sin argumentos, lanza un aviso de tipo E_STRICT: use la función time() en su lugar

Convirtiendo una cadena a formato de fecha

A partir de una cadena podemos recoger una fecha usando la función strtotime que tiene el siguiente formato:

Donde $time es la cadena de la que queremos obtener la fecha, $now, que es opcional y por defecto se toma la función time, es una marca de tiempo UNIX

A partir de PHP 5.0.0 los microsegundos comenzaron a estar permitidos, pero eran ignorados

En PHP 5 hasta 5.0.2, now y otros momentos relativos son computados erróneamente como la medianoche de hoy

Esto difiere entre versiones donde es computado como el momento actual

A partir de PHP 5.1.0 muestra el error E_STRICT y E_NOTICE cuando ocurren errores con zonas horarias

Y devuelve FALSE si falla, en vez de -1

En PHP 5 hasta 5.2.7, las peticiones de una incidencia de un día de la semana dado en un mes donde ese día de la semana era el primer día del mes, añadía incorrectamente una semana a la marca de tiempo devuelta

Esto fue corregido en 5.2.7 y se mantiene en versiones posteriores

Antes de PHP 5.3.0, 24:00 no era un formato válido y devolvía FALSE

Los formatos de tiempo relativos que se suministraban al parámetro $time como this week, previous week, last week, y next week se interpretaban como un período de 7 días en relación con la fecha y hora actual, en lugar de un período de la semana de Monday a Sunday