Desarrollo

Constantes y variables predefinidas en PHP

Desarrollo PHP

Seguimos con una serie de pocos artículos en los que buscamos ampliar la base de conocimientos, estructuras y utilidades que podemos tener en PHP y que, tarde o temprano, utilizaremos. O, como mínimo, nos ayudarán a crear mejores programas. Por ello, en este artículo vamos a trabajar con constantes y variables predefinidas.

Constantes

Como su propio nombre indica, una constante es, valga la redundancia, constante. La constante definirá el identificador para un valor sencillo que no va a cambiar en toda la ejecución de nuestro programa. Sí, puede parecer que es una simple variable a la que nunca le cambiamos el valor, pero a diferencia de una variable, que como su nombre indica puede variar, la constante es fija. Sin embargo, podríamos pensar en constantes y variables predefinidas como algo idéntico pero, como veremos, no será lo mismo.

Para la nomenclatura de una constante se utilizan las mismas reglas que para la definición de variables, es decir, deben empezar por una letra o guion bajo, seguido de letras, números o guiones bajos. Si quisiéramos comprobar la validez del nombre con una expresión regular y utilizando la función preg_match, lo representaríamos así: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

Declaración en mayúsculas

Por convención, los identificadores de las constantes que se definen se declaran siempre con todas sus letras en mayúsculas. Esto nos ayudará luego en nuestros programas a identificar más fácilmente valores que se han definido como constantes.

Sintaxis

Hay dos formas de definir constantes en PHP. Con la primera de ellas utilizamos la función predefinida define, la cual espera dos parámetros con tipo de datos string el primero de ellos y un valor null, integer, float, string, boolean o array para el segundo. Además, podemos añadir un tercer parámetro opcional donde se le puede indicar si queremos que sea insensible a mayúsculas y minúsculas (por defecto sí es sensible y no es lo mismo CONSTANTE que constante).

El primer parámetro corresponderá a la nomenclatura de la constante, mientras que el segundo indica el valor que recibe esa constante. Veamos ejemplos de constantes:

<?php
define('SALUDO', 'Hola mundo');
define('LIMITE', 25);
define('TIPO', array('animal', 'vegetal'));
define('PAGINACION', true);

// La siguiente definición es incorrecta debido a que se inicia con número
define('2DIAS', 2);

// La siguiente definición es desaconsejable debido a posibles futuras constantes mágicas (que ya veremos qué son)
define('__LIMITE__', 25);
?>

También podemos definir constantes con la palabra reservada const, de forma muy parecida a la anterior aunque con aspecto más de definición de variable.

<?php
const SALUDO = 'Hola mundo';
const LIMITE = 25;
const TIPO = array('animal', 'vegetal');
const PAGINACION = true;
?>

Para acceder luego a una constante, simplemente nos vale con escribir su nombre como si fuera una variable, sin necesidad tampoco de escribir las comillas (ya que, si las escribimos, se consideraría un string y no una constante). Por supuesto, en este caso no se coloca el símbolo $ que precede a las variables.

Utilización de define o de const

El acceso a una constante definida mediante la función define es global, algo que explicamos en este artículo. Sin embargo, las constantes definidas con const deben declararse al principio del entorno de la aplicación, pues se definen en tiempo de ejecución. Por ello, no pueden declararse dentro de funciones, bucles, o IF, por ejemplo.

Normalmente, nos encontraremos que para constantes que queremos utilizar en todo el programa utilizaremos, como hemos comentado, la forma define. Mientras que dentro de las clases (ya veremos qué son cuando lleguemos a ellas en unas semanas) se suele utilizar la forma const, pues son constantes que se utilizarán dentro de la propia clase.

Funciones útiles

Podemos utilizar algunas funciones que nos pueden ser útiles en determinados momentos. La primera de ellas es la función defined, a la cual le pasamos el nombre de la constante (importante, aquí sí debe estar entre comillas) y nos dice si existe o no.

Otra función es constant, la cual devuelve el valor de la constante. Esta función hace exactamente lo mismo que si escribimos la constante como tal, por lo que quizá no la consideremos tan útil. Sin embargo, hay casos donde quizá nos puede servir si se necesita recuperar el valor de alguna constante pero no se conoce el nombre (por ejemplo porque el nombre de la constante lo devuelve una función, por lo que no sabemos de antemano cuál es).

Por último, si queremos obtener una lista de todas las constantes definidas podemos utilizar la función get_defined_constants.

Variables predefinidas

Nos centraremos ahora en las variables predefinidas y, pese a que pueden tener similitudes, veremos que las constantes y variables predefinidas son cosas muy distintas.

Las variables predefinidas pueden parecer constantes que ya vienen definidas en PHP, y de hecho son algo parecido, pero no es exactamente así. En estas variables se guardan ciertos valores que sí van cambiando durante la ejecución del programa, como veremos a continuación. Algunas de estas variables, como por ejemplo $_REQUEST, ya las vimos en su momento. Sin embargo, vamos a presentar aquí el listado de las posibilidades.

$_GLOBALS

Esta variable hace referencia a todas las variables que se van definiendo en el ámbito global de nuestro programa. Por ejemplo, si definimos en un momento dado la variable $mensaje, podemos acceder a ella, además de por el método tradicional, también desde $_GLOBALS[‘mensaje’].

Esto, que puede parecer una pequeña inutilidad, nos servirá cuando el ámbito de las variables definidas no sea global, sino local, como explicamos en este artículo. Veamos un sencillo ejemplo:

<?php

function imprimir() {
    $mensaje = 'Dentro de la función';

    echo $_GLOBALS['mensaje'];
    echo $mensaje;
}

$mensaje = 'Fuera de la función';
imprimir();

?>

En este ejemplo, aunque nos pueda parecer poco intuitivo, el primer echo, el que imprime $_GLOBALS[‘mensaje’] va a mostrar el texto Fuera de la función, mientras que el segundo echo, el que imprime $mensaje, va a mostrar Dentro de la función. Es decir, que tenemos dos variables con el mismo nombre, $mensaje, pero utilizando $_GLOBALS accedemos a la definida globalmente.

$_SERVER

Esta variable es un array con información del entorno del servidor y de ejecución. Los valores que se guardan dentro de esta variable son creados por el servidor web, por tanto no se garantiza que todas las posibilidades existan o que incluso el servidor añada algunas nuevas. Podemos ver los índices disponibles dentro de esta variable en el manual, sin embargo vamos a comentar algunas, aunque nos dejamos muchas más en el tintero:

  • $_SERVER[‘PHP_SELF’] almacena el nombre del archivo que se está ejecutando actualmente. Por ejemplo, si estamos en https://programacionbasica.es/ejemplos/ejemplo.php, en esta variable encontraremos /ejemplos/ejemplo.php, que es el archivo en ejecución
  • $_SERVER[‘SERVER_NAME’] indica el host del servidor en el que se ejecuta el archivo, es decir, en el caso del ejemplo anterior, obtendríamos programacionbasica.es
  • $_SERVER[‘REQUEST_METHOD’] contiene el método de petición empleado para acceder a la página, por ejemplo POST, GET u otros
  • $_SERVER[‘REQUEST_URI’] tiene la URI que se ha empleado para acceder a la página, por ejemplo /ejemplo.php
  • $_SERVER[‘REMOTE_ADDR’] guarda la dirección IP desde la cual el usuario está viendo la página actual
  • $_SERVER[‘HTTPS’] ofrece un valor no vacío si el archivo se ejecuta con el protocolo HTTPS

$_GET, $_POST, $_FILES y $_REQUEST

Hemos visto ya estas variables sin saber que eran variables predefinidas. En concreto vimos $_REQUEST, $_POST y $_GET en el artículo sobre la recogida de datos de formularios y hablamos de $_FILES en el artículo sobre cómo subir ficheros desde un formulario. Por ello, no nos detendremos aquí a comentarlas de nuevo, sino simplemente a indicar que pertenecen al grupo de variablas predefinidas.

$_SESSION

Esta variable nos será muy útil cuando empecemos a entrar en el tema de utilizar sesiones para autenticar a los usuarios y crear sistemas de usuario y contraseña. Gracias a esta variable, podremos guardar los datos de la sesión y acceder a ellos desde las diferentes partes de nuestros programas. Expandiremos su uso cuando lleguemos a esos temas.

$_COOKIE

Las famosas cookies se guardan en esta variable. En ella se irán definiendo y utilizando las cookies que el programa vaya definiendo y necesitando.

Otras variables predefinidas

Existen unas pocas más variables predefinidas, como por ejemplo $_ENV o $argc, sin embargo son menos utilizadas en general o su utilización está más encaminada a la línea de comandos y no tanto a realizar programas como los estamos viendo. Si tenéis curiosidad, podéis leerlas en el manual, pero para nuestros propósitos básicos no van a ser muy utilizadas.

Resumen

Las constantes y variables predefinidas nos van a ayudar a la hora de implementar nuestros programas. Con las constantes podremos definir valores inmutables que vayamos a necesitar y que queremos marcar claramente como valores constantes y no como variables. Con las variables predefinidas que nos proporciona PHP tenemos un abanico de posibilidades que nos brinda el lenguaje para poder obtener datos del usuario, guardar la sesión, crear cookies y consultar muchos otros datos referentes al servidor web o los archivos utilizados.

Como hemos visto, constantes y variables predefinidas no son lo mismo, cosa que algunos a veces malinterpretan. Así pues, desde ahora ya podemos definir nuestras propias constantes y saber que, cuando estamos obteniendo los datos de un formulario, utilizamos las variables predefinidas. Con las constantes y variables predefinidas ampliamos un poco más el rango de creación de nuestros programas.

En el próximo artículo veremos la transformación de tipos de datos antes de meternos ya de lleno en otro gran bloque, el de trabajo con ficheros.

Deja una respuesta