Taller > PHP > Superglobals
$GLOBALS en PHP
PHP cuenta con una serie de variables superglobales que permiten acceder a datos en cualquier parte del script. Una de estas variables es $GLOBALS, un arreglo asociativo que contiene referencias a todas las variables globales del script. En este artículo, veremos cómo usar $GLOBALS y algunos ejemplos prácticos de su funcionamiento.
¿Qué es $GLOBALS?
$GLOBALS es un arreglo asociativo que contiene referencias a todas las variables definidas en el ámbito global de un script. Esto significa que puedes acceder a cualquier variable global desde cualquier parte del código, incluyendo dentro de funciones y métodos, sin necesidad de usar la palabra clave global.
Características principales de $GLOBALS: Accesibilidad global: Está disponible en todos los ámbitos del script, lo que facilita el acceso a variables globales desde funciones o métodos. Arreglo asociativo: Los nombres de las variables globales son las claves del arreglo $GLOBALS, y sus valores son los contenidos de esas variables.
Ejemplo básico
Veamos un ejemplo sencillo de cómo acceder a variables globales usando $GLOBALS.
<?php
$mensaje = "Hola Mundo";
$numero = 42;
echo $GLOBALS["mensaje"] . "\n"; // Imprime: Hola Mundo
echo $GLOBALS["numero"] . "\n"; // Imprime: 42
?>
Explicación:
$GLOBALS["mensaje"] y $GLOBALS["numero"] permiten acceder a las variables globales $mensaje y $numero desde cualquier parte del código.
Acceso a Variables Globales desde una Función
Si defines una variable en el ámbito global y otra con el mismo nombre dentro de una función, puedes usar $GLOBALS para diferenciar entre ambas.
<?php
$texto = "Variable Global";
function mostrarTexto() {
$texto = "Variable Local";
echo "Variable Global: " . $GLOBALS['texto'] . "\n";
echo "Variable Local: " . $texto . "\n";
}
mostrarTexto();
?>
Salida esperada:
Variable Global: Variable Global
Variable Local: Variable Local
Explicación:
En este caso, $GLOBALS['texto'] se refiere a la variable global $texto, mientras que $texto dentro de la función es una variable local. Ambas variables tienen el mismo nombre, pero pertenecen a contextos diferentes.
Cambios en PHP 8.1.0
Antes de PHP 8.1.0, era posible modificar variables globales directamente a través de una copia del arreglo $GLOBALS. Sin embargo, a partir de la versión 8.1.0, $GLOBALS es de solo lectura, lo que significa que no puedes modificar variables globales usando una copia de este arreglo.
Ejemplo antes de PHP 8.1.0
En versiones anteriores a PHP 8.1.0, se podía modificar una variable global a través de una copia de $GLOBALS.
<?php
$a = 10;
$globals_copia = $GLOBALS;
$globals_copia['a'] = 20;
echo $a; // Imprime: 20 en versiones anteriores a PHP 8.1.0
?>
Explicación:
En este ejemplo, se crea una copia de $GLOBALS llamada $globals_copia. Modificando $globals_copia['a'], también se cambia el valor de $a en el ámbito global.
Ejemplo después de PHP 8.1.0
A partir de PHP 8.1.0, $GLOBALS es un arreglo de solo lectura, lo que significa que modificar una copia de $GLOBALS ya no afecta las variables globales.
<?php
$a = 10;
$globals_copia = $GLOBALS;
$globals_copia['a'] = 20;
echo $a; // Imprime: 10 en PHP 8.1.0 y versiones posteriores
?>
Explicación:
Aunque se intenta cambiar el valor de $a a través de una copia de $GLOBALS, el valor original de $a no cambia. $GLOBALS ahora es de solo lectura, por lo que no es posible modificar variables globales de esta manera.
Consideraciones de Uso
Evitar el uso excesivo de $GLOBALS: Aunque $GLOBALS es útil para acceder a variables globales, su uso excesivo puede hacer que el código sea difícil de seguir. Se recomienda limitar su uso cuando sea absolutamente necesario.
Mejor alternativa: parámetros y retornos: En lugar de depender de $GLOBALS para pasar datos entre funciones, es más limpio pasar variables como parámetros y usar valores de retorno cuando sea posible.
Conclusión
$GLOBALS es una herramienta poderosa en PHP que permite acceder a variables globales desde cualquier parte del script. Sin embargo, su uso debe manejarse con cuidado para evitar confusión en el código.
Además, a partir de PHP 8.1.0, $GLOBALS es de solo lectura, lo que asegura que las variables globales no puedan modificarse inadvertidamente a través de una copia de este arreglo.