global
La parola chiave "global" in PHP consente di accedere a variabili dichiarate fuori dalla funzione corrente. Esplora sintassi, esempi e best practice.
La parola chiave PHP "global": una guida completa
In PHP, le variabili hanno uno scope limitato — una variabile creata all'interno di una funzione è locale a quella funzione e non può vedere le variabili definite nello script principale, e viceversa. La parola chiave global colma questa lacuna: indica a una funzione di utilizzare la stessa variabile che risiede nello scope globale (a livello di script) invece di crearne una nuova locale.
Questa pagina tratta la sintassi di global, il funzionamento dello scope delle variabili, la relazione tra global e il superglobale $GLOBALS, esempi pratici, insidie comuni e quando è preferibile ricorrere a un'alternativa più pulita.
Comprendere lo scope delle variabili
Per impostazione predefinita, una variabile definita fuori da una funzione non è visibile al suo interno:
<?php
$message = "Hello";
function show() {
echo $message; // Notice: Undefined variable $message
}
show();La funzione show() non ha accesso a $message perché $message vive nello scope globale e show() ha il proprio scope locale separato. La parola chiave global è un modo per dare alla funzione accesso a quella variabile esterna.
Sintassi
La parola chiave "global" viene utilizzata per accedere a una variabile globale in PHP. Ecco la sintassi di base per l'utilizzo della parola chiave "global":
La sintassi PHP di global
<?php
$variableName = "initial value";
function functionName() {
global $variableName;
// code to be executed
}In questo esempio, la parola chiave global viene utilizzata per accedere a una variabile chiamata $variableName dichiarata fuori dalla funzione corrente. Una volta dichiarata globale, qualsiasi modifica apportata dalla funzione a $variableName si riflette nello scope esterno, e qualsiasi modifica effettuata all'esterno è visibile all'interno della funzione.
È anche possibile importare più variabili globali contemporaneamente separandole con virgole:
<?php
$x = 5;
$y = 10;
function addThem() {
global $x, $y;
echo $x + $y; // Output: 15
}
addThem();Esempi
Vediamo alcuni esempi pratici di come può essere utilizzata la parola chiave "global":
Esempi di PHP global
<?php
// Example 1
$counter = 0;
function incrementCounter()
{
global $counter;
$counter++;
}
incrementCounter();
echo $counter . PHP_EOL; // Output: 1
// Example 2
$color = "red";
function changeColor()
{
global $color;
$color = "blue";
}
changeColor();
echo $color; // Output: blueIn questi esempi, utilizziamo la parola chiave global per accedere alle variabili dichiarate fuori dalla funzione corrente e modificarne i valori.
global vs. l'array $GLOBALS
PHP espone anche ogni variabile globale attraverso il superglobale $GLOBALS — un array associativo indicizzato per nome di variabile. A differenza di global, $GLOBALS è disponibile in ogni scope senza dichiarazione, quindi le seguenti due funzioni sono equivalenti:
<?php
$total = 100;
function withGlobal() {
global $total;
$total += 1;
}
function withGlobals() {
$GLOBALS['total'] += 1;
}
withGlobal();
withGlobals();
echo $total; // Output: 102$GLOBALS è comodo quando si ha bisogno solo di una o due variabili esterne, poiché evita una riga di dichiarazione global separata. Entrambi gli approcci leggono e scrivono nelle stesse variabili sottostanti.
Insidie comuni
globalfunziona solo per variabili che esistono già o che si intende creare nello scope globale. Un errore di battitura nel nome della variabile crea silenziosamente una variabile globale diversa invece di generare un errore.- Deve precedere l'utilizzo della variabile. Dichiarare
global $name;in cima alla funzione, prima di qualsiasi riferimento a$name. globalnon ha effetto su costanti o variabilistatic— è esclusivamente per variabili ordinarie dello scope globale.- Dipendenze nascoste. Una funzione che dipende da
globalpuò comportarsi diversamente a seconda dello stato dello script, il che rende più difficile testarla in isolamento.
Vantaggi
L'utilizzo della parola chiave "global" presenta diversi vantaggi, tra cui:
- Accesso alle variabili globali: la parola chiave "global" consente di accedere e modificare variabili dichiarate fuori dalla funzione o classe corrente.
- Nota sulla manutenibilità: sebbene
globalfornisca accesso diretto alle variabili dello scope esterno, un utilizzo eccessivo può rendere il codice più difficile da debuggare e testare. Lo sviluppo PHP moderno preferisce spesso passare le variabili come parametri di funzione, utilizzare la dependency injection o accedere all'array superglobale$GLOBALSquando necessario.
Conclusione
In conclusione, la parola chiave "global" consente agli sviluppatori PHP di accedere a variabili dichiarate fuori dalla funzione o classe corrente. Sebbene possa essere utile per script veloci o codice legacy, le best practice PHP moderne raccomandano di limitarne l'uso per evitare dipendenze strette e problemi di manutenibilità. Per un'architettura migliore, è preferibile passare le variabili come parametri, utilizzare la dependency injection o sfruttare l'array superglobale $GLOBALS.
Per approfondire, leggi lo scope delle variabili PHP, la parola chiave static per le variabili che persistono tra le chiamate e le variabili PHP in generale.