Comprendere lo Scope delle Variabili in PHP
In PHP le variabili hanno uno scope che determina dove possono essere accessibili e utilizzate nel codice, in base al punto di dichiarazione.
Lo scope di una variabile è la parte del programma in cui quella variabile è visibile e può essere utilizzata. In PHP, lo scope è determinato da dove si dichiara la variabile: una variabile creata al livello superiore di uno script è globale, mentre una variabile creata all'interno di una funzione è locale a quella funzione. In modo cruciale — e questo sorprende chi arriva da JavaScript o Python — le funzioni PHP non vedono automaticamente le variabili dello script circostante. Ogni funzione dispone del proprio insieme privato di variabili.
Questa pagina tratta i tre scope necessari nel PHP quotidiano — globale, locale e statico — oltre ai due modi per accedere a un valore globale dall'interno di una funzione (global e $GLOBALS), e quando preferire il passaggio di argomenti.
Variabili Locali
Una variabile assegnata all'interno di una funzione ha scope locale: esiste solo mentre quella funzione è in esecuzione ed è invisibile altrove. Questo è il comportamento predefinito e lo scope a cui ricorrere più spesso, poiché mantiene le funzioni autonome e prevedibili.
<?php
function myFunction() {
$x = 10; // local to myFunction()
echo $x; // works: prints 10
}
myFunction();
echo $x; // Warning: Undefined variable $x
?>Il secondo echo fallisce perché $x non è mai esistita al di fuori della funzione. Vale anche il contrario: una $x definita nello script principale non è visibile all'interno di myFunction() a meno che non venga portata esplicitamente in scope. Le variabili locali sono ideali per contatori, risultati intermedi e tutto ciò che è temporaneo e che non si vuole far trapelare nel resto del programma.
Variabili Globali
Una variabile dichiarata al livello superiore di uno script — al di fuori di qualsiasi funzione — ha scope globale. Nonostante il nome, non è automaticamente disponibile all'interno delle funzioni. Per leggerla o scriverla dall'interno di una funzione è necessario portarla nello scope con la parola chiave global.
Senza la riga global $x;, la $x all'interno della funzione sarebbe una variabile locale separata e non definita. La parola chiave global collega il nome locale a quello globale, pertanto le modifiche apportate all'interno della funzione influenzano anche il valore esterno.
L'array $GLOBALS
PHP memorizza anche ogni variabile globale in un array superglobale integrato chiamato $GLOBALS, indicizzato per nome di variabile. Poiché i superglobali sono visibili in ogni scope, questo offre un secondo modo per accedere a un valore globale senza la parola chiave global:
<?php
$x = 5;
$y = 10;
function addNumbers() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addNumbers();
echo $z; // Outputs 15
?>Qui $z viene creata nello scope globale dall'interno della funzione. $GLOBALS è utile quando si hanno bisogno di diversi globali contemporaneamente, ma presenta gli stessi svantaggi di global.
Usare i globali con parsimonia
I globali creano dipendenze nascoste e con effetti a distanza: qualsiasi funzione può modificarli, rendendo difficile rintracciare un bug. Si preferisce passare i valori come argomenti e restituire i risultati, in modo da rendere espliciti gli input e gli output di ciascuna funzione:
<?php
function addNumbers($a, $b) {
return $a + $b;
}
echo addNumbers(5, 10); // Outputs 15
?>Ricorrere a global o $GLOBALS solo per configurazioni davvero estese all'intero programma, non come scorciatoia per evitare di passare i dati.
Variabili Statiche
Normalmente una variabile locale viene distrutta quando la funzione ritorna, quindi riparte da zero alla chiamata successiva. Una variabile static è l'eccezione: dichiarata con la parola chiave static, mantiene il proprio valore tra le chiamate pur rimanendo locale (invisibile all'esterno della funzione). È perfetta per ricordare lo stato tra le chiamate — ad esempio, contare quante volte è stata eseguita una funzione.
L'inizializzatore static $x = 0; viene eseguito solo alla prima chiamata; nelle chiamate successive PHP lo salta e riutilizza il valore memorizzato.
Le variabili statiche vengono dichiarate con la parola chiave static e sono accessibili solo all'interno della funzione in cui sono dichiarate.
Conclusione
In conclusione, le variabili in PHP hanno uno scope che determina dove possono essere accessibili e utilizzate. Comprendere i diversi tipi di scope, come globale, locale e statico, può aiutare a scrivere codice più efficiente ed efficace. Utilizzando lo scope appropriato per le variabili, è possibile garantire che il codice sia organizzato e facile da mantenere.