Comprensión de las Superglobales de PHP y la Variable $_GLOBALS
PHP ofrece superglobales, variables predefinidas disponibles en todos los ámbitos. Aprende a usar $GLOBALS para acceder y modificar variables globales.
En PHP, una variable declarada fuera de cualquier función vive en el ámbito global. Por defecto, el código dentro de una función no puede ver esas variables — PHP mantiene el ámbito de las funciones separado para que la lógica local no modifique accidentalmente datos no relacionados. El array $GLOBALS es una forma de cruzar esa barrera: es una superglobal integrada que contiene una referencia a cada variable definida en el ámbito global, indexada por el nombre de la variable.
Esta página explica qué es $GLOBALS, en qué se diferencia de la palabra clave global, cómo leer y modificar variables globales a través de ella, y por qué generalmente deberías optar por una alternativa. Si eres nuevo en el concepto de ámbito en general, comienza con Ámbito de Variables y Variables PHP.
¿Qué son las Superglobales de PHP?
Las superglobales son variables PHP especiales y predefinidas que están disponibles en todos los ámbitos de un script. Puedes leerlas dentro de cualquier función, método o archivo incluido sin necesidad de declararlas primero con global. PHP las llena automáticamente antes de que se ejecute tu código.
La lista completa de superglobales:
$_GET— datos enviados a través de la cadena de consulta de la URL.$_POST— datos enviados mediante el envío de un formulario.$_COOKIE— datos enviados a través de cookies.$_SESSION— datos almacenados en la sesión del usuario.$_REQUEST— datos combinados de$_GET,$_POSTy$_COOKIE.$_SERVER— información sobre el servidor y el entorno de ejecución.$_ENV— variables de entorno.$_FILES— elementos subidos a través de un formulario HTTPPOST.$GLOBALS— una referencia a cada variable en el ámbito global.
Para un recorrido por las superglobales relacionadas con las solicitudes, consulta Superglobales PHP.
¿Qué es la Variable $GLOBALS en PHP?
$GLOBALS es un array asociativo cuyas claves son los nombres de tus variables globales (sin el $ inicial) y cuyos valores son referencias a esas variables. Como es una superglobal, funciona desde cualquier lugar — por lo que $GLOBALS['x'] lee el mismo almacenamiento que el $x de nivel superior, sin importar desde dónde en el script se acceda.
Aquí hay un ejemplo de cómo se puede usar la variable $GLOBALS para acceder a una variable global:
Ejemplo PHP de cómo se puede usar la variable $GLOBALS para acceder a una variable global
<?php
$x = 10;
$y = 20;
function add() {
global $x, $y;
return $x + $y;
}
echo add(); // 30
echo $GLOBALS['x']; // 10
echo $GLOBALS['y']; // 20
?>En este ejemplo, la función add() usa la palabra clave global para acceder a las variables $x e $y. Fuera de la función, $GLOBALS['x'] y $GLOBALS['y'] alcanzan exactamente las mismas variables — sin necesidad de declaración global.
$GLOBALS vs. la palabra clave global
Estos dos enfoques realizan el mismo trabajo pero de formas diferentes:
- La palabra clave
globalimporta una variable global al ámbito local, creando un alias local que luego se usa con su nombre normal ($x). Debes listar cada variable que quieras. $GLOBALSes un array que se indexa por nombre ($GLOBALS['x']). No necesitas declarar nada, y puedes construir la clave dinámicamente (por ejemplo$GLOBALS[$name]).
<?php
$total = 100;
function withGlobalKeyword() {
global $total;
return $total; // uses the local alias
}
function withGlobalsArray() {
return $GLOBALS['total']; // indexes the superglobal directly
}
echo withGlobalKeyword(); // 100
echo "\n";
echo withGlobalsArray(); // 100
?>Ambas imprimen 100. Prefiere la que sea más legible — pero ten en cuenta que, a partir de PHP 8.1, ya no puedes reasignar el array $GLOBALS completo (p. ej. $GLOBALS = [...]). Escribir en elementos individuales como $GLOBALS['x'] = 5 sigue funcionando.
Cómo Usar la Variable $GLOBALS en PHP
La variable $GLOBALS es una herramienta poderosa en la programación PHP que se puede usar para acceder a variables globales desde cualquier parte de tu script. Aquí hay algunas formas de usar la variable $GLOBALS:
Acceder a Variables Globales
Como vimos en el ejemplo anterior, puedes usar la variable $GLOBALS para acceder a cualquier variable global definida en tu script. Aquí hay otro ejemplo:
Acceso PHP a cualquier variable global definida en tu script
Modificar Variables Globales
La variable $GLOBALS también se puede usar para modificar variables globales. Esto puede ser útil si necesitas hacer cambios a una variable global desde dentro de una función o clase.
Aquí hay un ejemplo:
Modificar variables globales en PHP
<?php
$counter = 0;
function increment() {
global $counter;
$counter++;
}
increment();
echo $counter; // 1
echo "\n";
$GLOBALS['counter'] = 10;
echo $counter; // 10
?>En este ejemplo, la función increment() incrementa el valor de la variable $counter. Sin embargo, también puedes modificar el valor de la variable $counter directamente a través de la variable $GLOBALS.
Pasar Variables entre Funciones y Clases
La variable $GLOBALS también se puede usar para pasar variables entre funciones y clases. Esto puede ser útil si necesitas compartir datos entre diferentes partes de tu script.
Aquí hay un ejemplo:
Pasar variables globales entre funciones y clases en PHP
<?php
$data = array("name" => "John Doe", "age" => 30);
function display_data() {
global $data;
print_r($data);
}
class User {
function show_data() {
global $data;
print_r($data);
}
}
display_data(); // Array ( [name] => John Doe [age] => 30 )
$user = new User();
$user->show_data(); // Array ( [name] => John Doe [age] => 30 )
$GLOBALS['data']['email'] = "[email protected]";
display_data(); // Array ( [name] => John Doe [age] => 30 [email] => [email protected] )
$user->show_data(); // Array ( [name] => John Doe [age] => 30 [email] => [email protected] )
?>En este ejemplo, la función display_data() y la clase User acceden a la variable $data a través de la variable $GLOBALS. Esto te permite pasar la variable $data entre las diferentes partes de tu script.
Conclusión
La variable $GLOBALS es una herramienta poderosa en la programación PHP que proporciona acceso a todas las variables globales definidas en un script PHP. Ya sea que estés accediendo, modificando o pasando variables entre funciones y clases, la variable $GLOBALS es una herramienta versátil que puede ayudarte a escribir mejor código PHP.
Nota sobre buenas prácticas: Aunque $GLOBALS es útil, depender en exceso de variables globales generalmente se desaconseja en el desarrollo PHP moderno. El estado global hace que el código sea más difícil de probar y razonar, porque cualquier función puede cambiar silenciosamente un valor del que depende otra parte del programa. Prefiere pasar variables como argumentos de función, devolver valores o usar propiedades de clase para una mejor encapsulación y capacidad de prueba. Recurre a $GLOBALS principalmente para scripts rápidos o cuando interoperas con código heredado.