W3docs

Capire le Superglobali PHP e la Variabile $_GLOBALS

PHP è un linguaggio di scripting server-side usato per lo sviluppo web. Fornisce diverse superglobali, variabili predefinite sempre disponibili in ogni scope.

In PHP, una variabile dichiarata al di fuori di qualsiasi funzione vive nello scope globale. Per impostazione predefinita, il codice all'interno di una funzione non può vedere quelle variabili — PHP mantiene lo scope della funzione separato affinché la logica locale non sovrascriva accidentalmente dati non correlati. L'array $GLOBALS è un modo per attraversare questo confine: è una superglobale predefinita che contiene un riferimento a ogni variabile definita nello scope globale, indicizzata per nome di variabile.

Questa pagina spiega cos'è $GLOBALS, come si differenzia dalla parola chiave global, come leggere e modificare variabili globali attraverso di essa, e perché di solito dovresti preferire un'alternativa. Se sei nuovo al concetto di scope in generale, inizia con Scope delle Variabili e Variabili PHP.

Cosa sono le Superglobali PHP?

Le superglobali sono variabili PHP speciali e predefinite disponibili in tutti gli scope di uno script. Puoi leggerle all'interno di qualsiasi funzione, metodo o file incluso senza prima dichiararle con global. Vengono popolate automaticamente da PHP prima che il tuo codice venga eseguito.

L'elenco completo delle superglobali:

  • $_GET — dati passati tramite la query string dell'URL.
  • $_POST — dati passati tramite l'invio di un form.
  • $_COOKIE — dati passati tramite i cookie.
  • $_SESSION — dati memorizzati nella sessione dell'utente.
  • $_REQUEST — dati combinati di $_GET, $_POST e $_COOKIE.
  • $_SERVER — informazioni sul server e sull'ambiente di esecuzione.
  • $_ENV — variabili d'ambiente.
  • $_FILES — elementi caricati tramite un form HTTP POST.
  • $GLOBALS — un riferimento a ogni variabile nello scope globale.

Per una panoramica delle superglobali relative alle richieste, consulta Superglobali PHP.

Cos'è la Variabile $GLOBALS in PHP?

$GLOBALS è un array associativo le cui chiavi sono i nomi delle variabili globali (senza il $ iniziale) e i cui valori sono riferimenti a quelle variabili. Poiché è una superglobale, funziona da qualsiasi punto — quindi $GLOBALS['x'] legge la stessa memoria del $x globale, indipendentemente da dove vi si accede nello script.

Ecco un esempio di come la variabile $GLOBALS può essere usata per accedere a una variabile globale:

Esempio PHP di come la variabile $GLOBALS può essere usata per accedere a una variabile globale

<?php

$x = 10;
$y = 20;

function add() {
  global $x, $y;
  return $x + $y;
}

echo add(); // 30

echo $GLOBALS['x']; // 10
echo $GLOBALS['y']; // 20

?>

In questo esempio, la funzione add() usa la parola chiave global per accedere alle variabili $x e $y. Al di fuori della funzione, $GLOBALS['x'] e $GLOBALS['y'] raggiungono le stesse identiche variabili — senza bisogno di dichiarazioni global.

$GLOBALS vs. la parola chiave global

Questi due approcci svolgono lo stesso compito ma in modi diversi:

  • La parola chiave global importa una variabile globale nello scope locale, creando un alias locale che poi si usa con il suo nome normale ($x). Devi elencare ogni variabile che vuoi usare.
  • $GLOBALS è un array che si indicizza per nome ($GLOBALS['x']). Non si dichiara nulla e si può costruire la chiave dinamicamente (ad esempio $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
?>

Entrambe stampano 100. Preferisci quella che risulta più leggibile — ma nota che, a partire da PHP 8.1, non è più possibile riassegnare l'array $GLOBALS nel suo insieme (ad es. $GLOBALS = [...]). La scrittura su singoli elementi come $GLOBALS['x'] = 5 funziona ancora.

Come Usare la Variabile $GLOBALS in PHP

La variabile $GLOBALS è uno strumento potente nella programmazione PHP che può essere usato per accedere alle variabili globali da qualsiasi parte dello script. Ecco alcuni modi per usare la variabile $GLOBALS:

Accesso alle Variabili Globali

Come abbiamo visto nell'esempio precedente, puoi usare la variabile $GLOBALS per accedere a qualsiasi variabile globale definita nel tuo script. Ecco un altro esempio:

PHP accede a qualsiasi variabile globale definita nello script

php— editable, runs on the server

Modifica delle Variabili Globali

La variabile $GLOBALS può essere usata anche per modificare variabili globali. Ciò può essere utile se è necessario apportare modifiche a una variabile globale dall'interno di una funzione o classe.

Ecco un esempio:

PHP modifica le variabili globali

<?php

$counter = 0;

function increment() {
  global $counter;
  $counter++;
}

increment();
echo $counter; // 1

echo "\n";

$GLOBALS['counter'] = 10;
echo $counter; // 10

?>

In questo esempio, la funzione increment() incrementa il valore della variabile $counter. Tuttavia, è possibile modificare il valore della variabile $counter anche direttamente tramite la variabile $GLOBALS.

Passare Variabili tra Funzioni e Classi

La variabile $GLOBALS può essere usata anche per passare variabili tra funzioni e classi. Ciò può essere utile se è necessario condividere dati tra parti diverse dello script.

Ecco un esempio:

PHP passaggio di variabili globali tra funzioni e classi

<?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] )

?>

In questo esempio, la funzione display_data() e la classe User accedono entrambe alla variabile $data tramite la variabile $GLOBALS. Questo consente di passare la variabile $data tra le diverse parti dello script.

Conclusione

La variabile $GLOBALS è uno strumento potente nella programmazione PHP che fornisce accesso a tutte le variabili globali definite in uno script PHP. Che tu stia accedendo, modificando o passando variabili tra funzioni e classi, la variabile $GLOBALS è uno strumento versatile che può aiutarti a scrivere codice PHP migliore.

Nota sulle best practice: Sebbene $GLOBALS sia utile, fare molto affidamento sulle variabili globali è generalmente sconsigliato nello sviluppo PHP moderno. Lo stato globale rende il codice più difficile da testare e da comprendere, perché qualsiasi funzione può modificare silenziosamente un valore da cui dipende un'altra parte del programma. Preferisci passare le variabili come argomenti di funzione, restituire valori o usare proprietà di classe per una migliore incapsulamento e testabilità. Ricorri a $GLOBALS principalmente per script rapidi o quando si interagisce con codice legacy.

Pratica

Pratica
In PHP, quali sono i tipi di variabili disponibili in uno scope globale?
In PHP, quali sono i tipi di variabili disponibili in uno scope globale?
Was this page helpful?