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.
| Nome | Valido? |
|---|---|
$total, $userName, $user_name | sì |
$_count, $item2 | sì |
$2items | no, non può iniziare con una cifra |
$user-name | no, è $user meno name |
$this | no, è 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.