W3docs

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.

php— editable, runs on the server

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.

php— editable, runs on the server

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.

Esercizio

Pratica
Quali sono alcune caratteristiche delle variabili in PHP?
Quali sono alcune caratteristiche delle variabili in PHP?
Was this page helpful?