¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. PHP 7
  3. Utilizar las funciones PHP
Extrait - PHP 7 Desarrollar un sitio web dinámico e interactivo (2ª edición)
Extractos del libro
PHP 7 Desarrollar un sitio web dinámico e interactivo (2ª 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.

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) 

Con

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 = 'CONSTANTE'; 
// definir el valor de la constante 
define($nombreConstante,'valor de la CONSTANTE'); 
// mostrar el valor de la constante 
echo $nombreConstante,' = ',constant($nombreConstante); 
?> 

Resultado

CONSTANTE = valor de la 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 si una o varias variables están definidas...

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. 

Algunas funciones modifican el contenido de la matriz que se pasa como parámetro y, por lo tanto, no pueden aplicarse 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).

Desde la versión 7.2, si la función se aplica a una variable que no es una matriz, se devuelve un error de nivel E_WARNING y la función devuelve 0 si la variable no está inicializada y 1 si la variable se inicializa (efectivamente hay un elemento en una variable escalar). En las versiones anteriores, en esta situación, la función devuelve los mismos valores pero sin error de nivel E_WARNING (sin embargo...

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 (sensible a mayúsculas y 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.

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 Gestión de los formularios y los enlaces.

strlen

La función strlen devuelve el número de caracteres de una cadena.

Sintaxis

entero strlen(cadena cadena) 

cadena

Cadena en cuestión.

Ejemplo

<?php 
$x = 'OLIVIER HEURTEL'; 
echo "strlen('$x') = ",strlen($x);?> 

Resultado

strlen('Olivier Heurtel') = 15 

strtolower - strtoupper - ucfirst - lcfirst - ucwords

Estas funciones permiten realizar conversiones de minúsculas/mayúsculas, posiblemente limitadas a la(s) primera(s) palabra(s) de la cadena.

Sintaxis

cadena strtolower(cadena cadena) 
cadena strtoupper(cadena cadena) 
cadena ucfirst(cadena cadena) 
cadena lcfirst(cadena cadena) 
cadena ucwords(cadena cadena) 

cadena

Cadena que se va a procesar.

La función strtolower convierte todos los caracteres de una cadena en minúsculas.

La función...

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".

Desde la versión 7, PHP solo ofrece una extensión para utilizar expresiones regulares: PCRE (Perl Compatible Regular Expression)

La extensión Regex POSIX, presente en las versiones anteriores de PHP, se ha eliminado en la versión 7 (estaba obsoleta desde la versión 5.3).

La extensión PCRE (funciones preg_*) utiliza prácticamente la misma sintaxis que el lenguaje Perl para escribir la expresión regular. Esta extensión está siempre presente y no se puede deshabilitar.

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...

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 manipulation 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 corresponden 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.

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. Se incluyó en la versión 5.3.

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.

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 corresponden a una fecha válida.

Sintaxis

booleano checkdate(entero mes, entero día, entero año) 

mes

Número del mes (1 a 12).

día

Número del día (1 a 31).

año

Año (1 a 32767).

checkdate devuelve TRUE si la fecha construida con los tres componentes es válida y FALSE en caso contrario. Esta función tiene en cuenta los años bisiestos.

Ejemplo

<?php 
$día...

Generar un número 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 veintitres 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

5afbf6de88b18 
5afbf6de88b1f 
abc5afbf6de88b20 
5afbf6de88b217.25605598 

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....

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

Leer 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 de contexto...

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 (valor TRUE, por defecto) 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 Gestión de los formularios y los enlaces);

  • identificación HTTP (véase el capítulo Administrar las sesiones, sección Autenticación);

  • descarga (download) de un documento (veáse el capítulo Gestión...

Ejercicios

1. Ejercicio 3: manipuler les 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.

Etapa 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 ....” con una fecha en español que muestre el nombre del día, el número del día, el nombre del mes y el del año con cuatro chifras.

  • 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). Gestiona de esta manera 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 07 junio de 2018.  
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 en español.  
setlocale(LC_ALL,'es_ES');   
echo 'Hoy es ',strftime('%A %d %B %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','Y'];  ...