🎃 Grandes descuentos en libros en línea, eformaciones y vídeos*. Código CALABAZA30. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. PHP 8
  3. Utilizar las funciones PHP
Extrait - PHP 8 Desarrolle un sitio web dinámico e interactivo (2a edición)
Extractos del libro
PHP 8 Desarrolle un sitio web dinámico e interactivo (2a edición) Volver a la página de compra del libro

Utilizar las funciones PHP

Preámbulo

El objetivo de este capítulo es presentar las funciones más útiles para el desarrollo de un sitio web.

PHP ofrece numerosas funciones; la descripción de cada función está disponible en línea en el sitio www.php.net.

images/01RIT8PHP01.png

Desde la versión 8, es posible pasar parámetros a una función utilizando el nombre del parámetro en lugar de su posición. Esta funcionalidad se presenta en el capítulo Escribir funciones y clases PHP, pero puede utilizarse para las funciones propias del lenguaje PHP y, por tanto, para las funciones que se presentan en este capítulo. Sin embargo, en este capítulo, los nombres reales de los parámetros de las funciones no se presentan (están traducidos); para conocerlos, consulte la documentación en línea de las funciones… 

Desde la version 8.1, pasar el valor NULL en un parámetro que no es explícitamente opcional es obsoleto, y por lo tanto, genera una alerta E_DEPRECATED.

Ejemplo

<?php 
$x = null; 
$n = strlen($x); 
?> 

Resultado

Deprecated: strlen(): Passing null to parameter #1 ($string) of type string 
is deprecated in /app/scripts/index.php on line 3 

Manipular las constantes, las variables y los tipos de datos

1. Constantes

PHP ofrece una serie de funciones útiles sobre las constantes:

Nombre

Función

defined

Indica si una constante está definida o no.

constant

Devuelve el valor de una constante.

defined

La función defined permite saber si una constante está definida o no.

Sintaxis

booleano defined(cadena nombre) 

nombre

Nombre de la constante.

La función defined devuelve TRUE si la constante está definida y FALSE en caso contrario.

Ejemplo

<?php 
// Probar si la constante CONSTANTE está definida. 
$ok = defined('CONSTANTE'); 
if ($ok) { 
  echo 'CONSTANTE está definida.<br />'; 
} else { 
  echo 'CONSTANTE no está definida.<br />'; 
}; 
// Definir la constante CONSTANTE 
define('CONSTANTE','valor de la CONSTANTE'); 
// Probar si la constante CONSTANTE está definida. 
$ok = defined('CONSTANTE'); 
if ($ok) { 
  echo 'CONSTANTE está definida.<br />'; 
} else { 
  echo 'CONSTANTE no está definida.<br />'; 
}; 
?> 

Resultado

CONSTANTE no está definida. 
CONSTANTE está definida. 

constant

La función constant devuelve el valor de una constante cuyo nombre se pasa como parámetro.

Sintaxis

mixto constant(cadena nombre) 

Donde

nombre

Nombre de la constante.

Esta función es útil para recuperar el valor de una constante cuyo nombre no se conoce a priori.

Ejemplo

<?php 
// definir el nombre de la constante en una variable 
$nombreConstante = 'OTRA CONSTANTE'; 
// definir el valor de la constante 
define($nombreConstante,'valor de la OTRA CONSTANTE'); 
// mostrar el valor de la constante 
echo $nombreConstante,' = ',constant($nombreConstante); 
?> 

Resultado

OTRA CONSTANTE = valor de la OTRA CONSTANTE 

Otras funciones permiten conocer el tipo de una constante (véase la sección Manipular las constantes, las variables y los tipos de datos - Tipos de datos).

2. Variables

PHP ofrece una serie de funciones útiles en las variables:

Nombre

Función

empty

Indica si una variable está vacía o no.

isset

Indica...

Manipular las matrices

PHP ofrece un gran número de funciones que permiten manipular las matrices.

Las funciones utilizadas con mayor frecuencia son:

Nombre

Función

count

Cuenta el número de elementos de una matriz.

in_array

Comprueba si un valor está presente en una matriz.

array_search

Busca un valor en una matriz.

array_replace

Reemplaza valores de una matriz.

[a|k][r]sort

Ordena una matriz (diversas variantes posibles).

explode

Divide una cadena según un separador y almacena los elementos en una matriz.

implode

Reagrupa los elementos de una matriz en una cadena mediante un separador.

max

Devuelve el valor más alto almacenado en una matriz.

min

Devuelve el valor más bajo almacenado en una matriz.

str_split

Divide una cadena en fragmentos de longitud fija y almacena los elementos en una matriz.

array_column

Devuelve los valores de una columna de una matriz multidimensional. 

array_key_first

Devuelve la primera clave de un array. 

array_key_last

Devuelve la última clave de un array. 

Algunas funciones modifican el contenido de la matriz que se pasa como parámetro y, por lo tanto, no se pueden aplicar a una matriz constante, ya que se obtendría un error fatal:

Fatal error: Only variables can be passed by reference in... 

La función is_array (véase la sección Manipular las constantes, las variables y los tipos de datos - Tipos de datos) permite conocer si una variable es de tipo matriz. Recuérdelo. 

Existen muchas otras funciones y puede consultar la descripción de cada función en línea en www.php.net. Ahí encontrará, especialmente, funciones para:

  • realizar cálculos (suma...),

  • extraer una submatriz de una matriz,

  • fusionar matrices,

  • desduplicar una matriz...

count

La función count permite conocer el número de elementos en una matriz.

Sintaxis

entero count (matriz variable) 

variable

Variable en cuestión.

Si la variable es una matriz, la función count devuelve el número de elementos presentes en la matriz (0 si la matriz está vacía).

images/01RIT8PHP01.png

Desde la versión 8, si la función se aplica a una variable que no es una matriz, se produce una excepción TypeError (simple error de nivel E_WARNING en la versión 7); este error interrumpe el script si no se administra.

Ejemplo

<?php  
$x = array();  
echo...

Manipular los números

Las funciones más útiles para manipular los números son las siguientes:

Nombre

Función

abs

Valor absoluto de un número.

ceil

Redondeo de un número al entero superior.

floor

Redondeo de un número al entero inferior.

intdiv

Cociente de la división entera de dos enteros.

max

El valor más grande de una lista de números.

min

El valor más pequeño de una lista de números.

rand

Generación de números aleatorios.

round

Redondeo de un número con punto flotante.

abs

La función abs devuelve el valor absoluto de un número.

Sintaxis

número abs(número valor) 

valor

Número que se va a procesar.

La función abs devuelve un número del mismo tipo que el número que se pasa como parámetro (entero o número con punto flotante).

Ejemplo

<?php   
echo 'abs(123) = ',abs(123),'<br />';   
echo 'abs(-321) = ',abs(-321);  
?> 

Resultado

abs(123) = 123  
abs(-321) = 321 

ceil

La función ceil («techo») redondea un número al entero superior.

Sintaxis

número ceil(número valor) 

valor

Número que se va a procesar.

La función ceil devuelve un número entero, pero cuyo tipo de datos es un número con punto flotante (float).

Ejemplo

<?php   
echo 'ceil(123.45) = ',ceil(123.45),'<br />';   
echo 'ceil(-123.45) = ',ceil (-123.45);  
?> 

Resultado

ceil(123.45) = 124  
ceil(-123.45) = -123 

floor

La función floor («suelo») redondea un número al entero inferior.

Sintaxis

número floor(número valor) 

valor

Número que se va a procesar.

La función floor devuelve un número entero, pero cuyo tipo de datos es un número con punto flotante (float).

Ejemplo

<?php   
echo 'floor(1234.56) = ',floor(1234.56),'<br />';   
echo 'floor(-1234.56) = ',floor (-1234.56);  
?> 

Resultado

floor(1234.56) = 1234  
floor(-1234.56) = -1235 

intdiv

La función intdiv devuelve el cociente de la división entera de dos enteros.

Sintaxis

entero intdiv(entero dividendo, entero divisor) 

dividendo

Dividendo.

divisor

Divisor....

Manipular las cadenas de caracteres

Las funciones más útiles para la manipulación de cadenas de caracteres son las siguientes: 

Nombre

Función

strlen

Devuelve el número de caracteres de una cadena.

strtolower

strtoupper

ucfirst

ucwords

lcfirst

Las conversiones de minúsculas/mayúsculas pueden limitarse a la(s) primera(s) palabra(s).

strcmp

strcasecmp

Comparación de cadenas (diferencia las mayúsculas de las minúsculas o no).

[s]printf

v[s]printf

Formato de una cadena (idéntica a las funciones de C equivalentes).

number_format

Formato de un número.

[l|r]trim

Eliminación de caracteres «blancos».

substr

Extracción de una subcadena de una cadena.

str_repeat

Construcción de una cadena por repetición de caracteres.

str[r][i]pos

Búsqueda de la posición de una ocurrencia (carácter o cadena) dentro de una cadena.

str[i]str

strrchr

Extracción de la subcadena dentro de una cadena a partir de una ocurrencia determinada de un carácter o una cadena.

str_[i]replace

Sustitución de las ocurrencias de una cadena por otra cadena.

strtr

Sustitución de las ocurrencias de un carácter por otro carácter o de una cadena por otra cadena.

str_contains

Determina si una cadena contiene otra cadena (novedad de la versión 8).

str_starts_with

Determina si una cadena empieza por otra cadena (novedad de la versión 8).

str_ends_with

Determina si una cadena termina por otra cadena (novedad de la versión 8).

Recuerde las funciones explode, implode y str_split anteriormente presentadas (véase la sección Manipular las matrices). Otras funciones más específicamente relacionadas con la gestión de formularios se estudian en el capítulo Gestionar formularios y enlaces.

images/01RIT8PHP01.png

Desde la versión 8.2, las funciones que realizan conversiones entre mayúsculas y minúsculas (strtolower, strtoupper, lcfirst, ucfirst, ucwords) o búsquedas/comparaciones que no tienen en cuenta mayúsculas y minúsculas (stristr, stripos, strripos, str_ireplace) ya no toman en cuenta las características lingüísticas locales definidas mediante la función setlocale (presentada más adelante en este capítulo) y solo trabajan en el rango de caracteres ASCII, lo que puede provocar diferencias en los resultados....

Utilizar expresiones regulares

1. Introducción

Una expresión regular es una cadena de caracteres que describe el modelo (también llamado patrón) que se busca en otra cadena de caracteres. Las expresiones regulares son muy útiles y eficaces para llevar a cabo verificaciones o manipulaciones complejas en cadenas de caracteres.

El término inglés «regular expresión» a menudo se traduce también como «expresión racional». 

PHP ofrece una extensión para utilizar expresiones regulares: PCRE (Perl Compatible Regular Expression).

Esta extensión (funciones preg_*) utiliza prácticamente la misma sintaxis que el lenguaje Perl para escribir la expresión regular.

2. Estructura de una expresión regular

Una expresión regular de Perl debe estar delimitada por un carácter delimitador. Este delimitador puede ser cualquier carácter excepto la barra invertida (\); muy a menudo se utiliza la barra (/). También es posible utilizar los delimitadores (), {}, [] y <>.

Ejemplo (delimitador en negrita)

/http:\/\/(.*) / 
{http://(.*)} 

Como se muestra en el primer ejemplo anterior, si el carácter delimitador está presente en el patrón deseado, debe escaparse con una barra invertida (\). En este caso, utilizar un delimitador diferente a / (#, por ejemplo) permite obtener una expresión más fácil de leer.

Después del delimitador de cierre, es posible especificar las opciones que modifican el comportamiento de la búsqueda.

Ejemplo (opciones en negrita y utilización del carácter # como delimitador)

#http://(.*)#is 

Las principales opciones se presentan a continuación.

En una expresión regular, la mayoría de los caracteres se representan ellos mismos. Así, la expresión /http/ permite buscar la cadena http.

Pero el poder de las expresiones regulares reside en la existencia de caracteres especiales (comodines), que se interpretan para describir el patrón buscado.

Barra invertida

El carácter de barra invertida tiene varios usos.

En primer lugar, permite escapar los caracteres especiales (^.[$()|*+?{\) o el delimitador de la expresión cuando se buscan como tales. Por ejemplo, el patrón #a\*{2,4}b# permite buscar las secuencias que comienzan...

Manipular las fechas

PHP no gestiona las fechas con un tipo de datos específico. Sin embargo, es posible manipular las fechas, ya sea en forma de una cadena de caracteres o bien en forma de un timestamp Unix (que corresponde al número de segundos transcurridos desde el 1.° de enero de 1970 01:00:00).

Hay varias clases que ofrecen funcionalidades avanzadas para la manipulación de fechas (clase DateTime) e intervalos (clase DateInterval) en una forma orientada a objetos (ver la documentación).

Varias funciones permiten manipular las fechas en una u otra de estas formas:

Nombre

Función

checkdate

Comprueba que tres números enteros que representan el día, el mes y el año correspondan a una fecha válida.

date

Convierte en cadena una fecha determinada en forma de un timestamp Unix.

strftime

Convierte en cadena una fecha determinada en forma de un timestamp Unix, usando las características locales.

datefmt_create

Define un formato que puede utilizarse para convertir una fecha en una cadena utilizando la función datefmt_format.

datefmt_format

Formatea una fecha/hora como cadena utilizando un formato creado previamente con la función datefmt_create.

getdate

Almacena en una matriz los diferentes componentes de una fecha determinada en forma de un timestamp Unix.

date_parse_from_format

Almacena en una matriz los diferentes componentes de una fecha determinada en forma de una cadena de caracteres.

time

Proporciona el timestamp Unix actual.

mktime

Crea un timestamp Unix a partir de los distintos componentes de una fecha.

microtime

Proporciona el timestamp Unix actual acompañado del número de microsegundos transcurridos desde el último segundo.

hrtime

Devuelve un tiempo transcurrido a partir de un instante arbitrario con una gran precisión.

idate

Proporciona los componentes de una fecha dada en forma de un timestamp Unix.

La llamada a algunas funciones puede generar una alerta de nivel E_NOTICE si el huso horario no se define correctamente (ver la directiva de configuración date.timezone del archivo de configuración de PHP). En este libro, suponemos que el valor de esta directiva es Europe/Paris.

checkdate

La función checkdate comprueba que los tres números enteros que representan el día, el mes y el año correspondan a una fecha válida.

Sintaxis

booleano checkdate(entero mes, entero...

Generar un identificador único

En algunas situaciones, puede ser necesario generar identificadores únicos.

PHP ofrece la función uniqid para generar estos identificadores únicos.

Sintaxis

cadena uniqid()([cadena prefijo [, booleano más_único]]) 

prefijo

Prefijo que se va a añadir al identificador.

Añada una cadena vacía o nada si no desea ningún prefijo.

más_único

Si este parámetro se coloca en TRUE, se añaden datos adicionales al final del valor devuelto para obtener un identificador más largo y más difícilmente identificable.

La función uniqid devuelve una cadena de trece caracteres, o veintitrés si el parámetro más_único es TRUE (sin contar el prefijo), calculado a partir de la hora actual en milisegundos.

Ejemplo

<?php  
echo uniqid(),'<br />';  
echo uniqid (),'<br />';  
echo uniqid('abc'),'<br />';  
echo uniqid('',TRUE) ,'<br />';  
?> 

Resultado

603e17c1be84f 
603e17c1be861 
abc603e17c1be862 
603e17c1be8635.27083137 

Este ejemplo muestra que el identificador generado es único, incluso si la diferencia entre dos llamadas sucesivas es baja. De pronto, el identificador generado puede considerarse insuficientemente aleatorio y un poco demasiado determinista.

Una técnica...

Manipular los archivos en el servidor

1. Funciones útiles

PHP ofrece un gran número de funciones que permiten manipular los archivos en el servidor.

Las funciones utilizadas con mayor frecuencia son las siguientes:

Nombre

Función

fopen

Abrir un archivo

fclose

Cerrar un archivo

fread

Leer el contenido de un archivo (en una cadena)

file

Leer el contenido de un archivo (en una matriz)

readfile

Leer el contenido de un archivo y enviarlo directamente a la salida

fwrite

Escribir en un archivo

file_get_contents

Abrir, leer y cerrar un archivo

file_put_contents

Abrir, escribir y cerrar en un archivo

copy

Copiar un archivo

unlink

Eliminar un archivo

rename

Cambiar el nombre de un archivo

file_exists

Probar la existencia de un archivo

filesize

Obtener el tamaño de un archivo

chdir

Cambiar el directorio actual

opendir

Abrir un directorio

closedir

Cerrar un directorio

readdir

Leer el contenido de un directorio

scandir

Listar el contenido de un directorio (en una matriz)

Algunas de estas funciones tomarán como parámetro un nombre de archivo o de directorio. En una plataforma de Windows, para especificar una ruta de acceso en una cadena de caracteres delimitada por comillas, debe escapar la barra invertida (con una barra invertida = \\) o puede usar una notación tipo «Unix», con barras (/). Por ejemplo, la ruta c:\temp\info.txt se puede escribir «c:\\temp\\info.txt» o «c:/temp/info.txt». Si no se ha especificado ninguna ruta, se utiliza el directorio actual. Se pueden especificar nombres relativos utilizando el carácter . (punto) para designar el directorio actual, y .. (dos puntos) para designar el directorio superior.

La constante predefinida DIRECTORY_SEPARATOR da el carácter separador utilizado en los nombres de directorio para la plataforma en la que está instalado PHP. La constante predefinida PHP_EOL da la secuencia de caracteres utilizada por la plataforma para representar una nueva línea.

Además, varias funciones tienen un parámetro (llamado utilizar_inclusión en las sintaxis de este libro) que permite buscar el archivo en los directorios especificados por la directiva de configuración include_path.

La mayoría de las funciones de manipulación de archivos permiten acceder de manera más general a los flujos de datos (HTTP, FTP, etc.). En este sentido, las funciones aceptan un argumento adicional...

Manipular los encabezados HTTP

La función header permite enviar encabezados HTTP con la página HTML.

Sintaxis simplificada

header(cadena encabezado[, booleano reemplazar[, entero código_respuesta]]) 

encabezado

Cadena que se va a enviar como encabezado HTTP con la página HTML.

reemplazar

Indica si la función debe reemplazar un encabezado previamente emitido (por defecto, el valor TRUE) o bien añadir un nuevo encabezado (valor FALSE).

código_respuesta

Código de respuesta HTTP.

Los diferentes encabezados HTTP se describen en RFC 2616.

Por ejemplo, la función header puede utilizarse para enviar un encabezado que prohíba el almacenamiento en caché de la página por parte del cliente o por un proxy. Esta necesidad es bastante común en los scripts PHP que generan HTML dinámico, cuyo contenido cambia en función del usuario.

Ejemplo

// HTTP 1.0  
header("Pragma: no-cache");  
// HTTP 1.1  
header("Cache-Control: no-cache, must-revalidate"); 

En este libro, vamos a tener la oportunidad de utilizar la función header en varias situaciones:

  • redirección HTTP (véase el capítulo Gestionar formularios y enlaces);

  • identificación HTTP (véase el capítulo Gestionar sesiones, sección Autenticar);

  • descarga (download) de un documento (véase el capítulo Gestionar formularios y enlaces, apartado...

Ejercicios

1. Ejercicio 3: manipular los datos

Ahora que hemos estudiado un gran número de funciones PHP, podemos simplificar el código que habíamos escrito en el ejercicio 2, ver la información adicional y modificar la presentación de algunos datos.

Paso 1

Para empezar, vamos a mostrar un nuevo mensaje que da la fecha del día, simplifica el código que cuenta el número de letras del nombre y determina si el nombre empieza por una vocal.

Indicaciones:

  • En un nuevo directorio, copie los scripts inicio.php y commun.inc.php desarrollados en el ejercicio 2.

  • En el script inicio.php, después del mensaje de bienvenida, muestre un nuevo mensaje con la fecha del día con la forma «Hoy es ....». La fecha tendrá el formato DD/MM/AAAA.

  • Simplifique el código que cuenta el número de caracteres del nombre, utilizando una función PHP en lugar del bucle while.

  • Simplifique el código que determina si el nombre empieza por una vocal o una consonante, utilizando funciones PHP en lugar de la estructura de control if o switch. Por ejemplo, puede definir una tabla (o una cadena), que contenga la lista de vocales y probar si la primera letra del nombre está en ella (o en esta cadena). De esta manera, se gestiona el caso en que el nombre no empiece por una letra mayúscula como se supone inicialmente.

Resultado esperado (sin visualización del tabla de autores)

Hola Olivier.  
Bienvenido a miSitio.com.  
Hoy es jueves 08 de febrero de 2024.  
Su nombre tiene 7 letras.  
Su nombre empieza por una vocal. 

Solución (código PHP modificado)

<?php  
// Ver los mensajes  
echo "Hola $nombre.<br />";  
echo 'Bienvenido a ',MI_SITIO,'.<br />';  
// Ver la fecha 
echo 'Hoy es ',date('d/m/Y'),'.<br />';    
// Contar el número de letras del nombre.  
echo 'Su nombre tiene ',strlen($nombre),' letras.<br />';  
// Determinar si el nombre empieza por una vocal o consonante.  
$vocales = ['A','E','I','O','U'];  
if (in_array(strtoupper($nombre[0]),$vocales)) {  
 echo 'Su nombre empieza por una vocal.<br />';  ...