W3docs

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, $_POST y $_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 HTTP POST.
  • $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 global importa 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.
  • $GLOBALS es 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

php— editable, runs on the server

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.

Práctica

Práctica
En PHP, ¿cuáles son los tipos de variables disponibles en un ámbito global?
En PHP, ¿cuáles son los tipos de variables disponibles en un ámbito global?
Was this page helpful?