Menu

Variabili PHP: dichiarazione, scope, global e static

Una variabile PHP inizia con $ e nasce quando le assegni un valore: $name = "Ada";. Non c'è una parola chiave di dichiarazione né un tipo fisso. Le funzioni non vedono le variabili esterne a meno che tu non le passi, usi global o le catturi; static conserva un valore tra le chiamate.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Una variabile PHP è un nome che inizia con $, e la crei assegnandole un valore: $name = "Ada";. Non c'è una parola chiave di dichiarazione né un tipo da indicare, perché è il valore a decidere il tipo. Più avanti puoi assegnarle un valore di tipo diverso.

Regole per i nomi delle variabili

Il nome di una variabile inizia con $, poi una lettera o un underscore, poi lettere, cifre o underscore qualsiasi. Le lettere non ASCII contano come lettere, quindi $名前 è valido, anche se la norma sono i nomi ASCII. I nomi distinguono maiuscole e minuscole.

NomeValido?
$total, $userName, $user_namesì
$_count, $item2sì
$2itemsno, non può iniziare con una cifra
$user-nameno, è $user meno name
$thisno, è riservato all'oggetto corrente; assegnarlo è un errore fatale

Quindi $city, $City e $CITY sono tre variabili diverse. Usa snake_case ($first_name) o camelCase ($firstName), e mantieni un solo stile per progetto. Gli standard di codifica PSR lasciano volutamente libera la scelta dei nomi delle variabili; il codice Laravel e Symfony usa per lo più camelCase.

Usare le variabili nelle stringhe

Dentro le virgolette doppie PHP sostituisce le variabili con i loro valori; dentro le virgolette singole no. Racchiudi la variabile tra graffe quando è seguita direttamente da lettere o quando accedi a un elemento di un array con una chiave stringa:

La pagina sulle stringhe tratta in dettaglio virgolette, concatenazione e interpolazione.

Variabili non definite e valori predefiniti

Leggere una variabile mai assegnata dà null, e il tuo PHP stampa un warning:

Warning: Undefined variable $discount in /home/index.php on line 3

Controlla prima con isset, oppure usa l'operatore di null coalescing ?? per fornire un valore predefinito. Entrambi funzionano senza warning:

$x ??= 0; è la forma breve di $x = $x ?? 0;. Il caso tipico sono i valori di form e URL: $page = $_GET['page'] ?? 1;.

Lo scope delle variabili nelle funzioni

Le variabili definite fuori da una funzione non sono visibili al suo interno, e quelle create dentro una funzione spariscono quando la funzione termina. È la sorpresa più comune per chi arriva da JavaScript:

Senza il ?? 0, la prima funzione darebbe un warning per $taxRate non definita. Passare i valori come parametri rende le funzioni prevedibili e facili da testare, ed è la prima strada da prendere. La pagina sulle funzioni tratta parametri e valori di ritorno.

La parola chiave global e $GLOBALS

Quando una funzione deve proprio usare una variabile globale, dichiarala con global, oppure passa dall'array $GLOBALS, che contiene ogni variabile globale per nome:

Le variabili globali rendono il codice più difficile da seguire, perché qualsiasi funzione può modificarle. Compaiono nel codice più vecchio e nei plugin WordPress (global $wpdb;); nel codice nuovo, passa i valori come parametri o usa una classe.

Le variabili static conservano il valore

Una variabile static dentro una funzione viene creata una volta sola e conserva il suo valore tra le chiamate. Resta comunque locale: il codice fuori dalla funzione non la vede.

Variabili variabili ($$name)

$$name usa il valore di $name come nome di un'altra variabile. Funziona, ma gli array fanno quasi sempre lo stesso lavoro in modo più chiaro:

<?php
$field = "color";
$$field = "blue";        // creates $color
echo $color, "\n";

// The clearer way to have names chosen at runtime:
$settings = [];
$settings[$field] = "blue";
echo $settings["color"], "\n";

Copia o riferimento

Assegnare una variabile a un'altra copia il valore, array compresi. Metti & davanti per far puntare invece entrambi i nomi allo stesso valore:

Gli oggetti si comportano diversamente: assegnare un oggetto copia un riferimento allo stesso oggetto, quindi le modifiche fatte tramite una variabile sono visibili anche dall'altra. Usa clone per una copia vera.

Errore comune: una variabile impostata dentro un if o un ciclo

PHP non ha lo scope di blocco, quindi una variabile creata dentro if, for o foreach esiste ancora dopo. È comodo, ma nasconde un bug: quando il blocco non viene eseguito, la variabile non è mai stata creata.

Senza la riga con il valore predefinito, un $orders vuoto lascerebbe $message non definita e stamperebbe un warning. Dai un valore a ogni variabile prima del blocco che potrebbe impostarla.

Domande frequenti

Come si dichiara una variabile in PHP?

Assegna un valore a un nome che inizia con $: $count = 10;. PHP non ha una parola chiave var o let né un tipo nella dichiarazione; la variabile nasce con la prima assegnazione e prende il tipo del suo valore.

Perché la mia funzione non vede una variabile definita fuori?

Le funzioni PHP hanno un proprio scope locale e non vedono automaticamente le variabili globali. Passa il valore come parametro (la soluzione pulita), dichiara global $name; dentro la funzione, oppure leggi $GLOBALS['name']. Le closure possono catturarla con use ($name), e le arrow function fn() la catturano automaticamente.

Cos'è una variabile static in PHP?

Una variabile locale dichiarata con static dentro una funzione, come static $calls = 0;. Viene inizializzata una volta sola e conserva il suo valore tra le chiamate a quella funzione, il che è utile per contatori e cache semplici.

I nomi delle variabili PHP distinguono maiuscole e minuscole?

Sì. $name, $Name e $NAME sono tre variabili diverse. I nomi di funzioni e classi invece in PHP non distinguono maiuscole e minuscole.

Come elimino una variabile in PHP?

Chiama unset($name);. Dopo, isset($name) è false e leggerla dà un warning "Undefined variable". Assegnare null mantiene la variabile ma la svuota.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA