Le variabili sono uno degli strumenti fondamentali di ogni linguaggio di programmazione. Una variabile è una porzione di memoria in cui viene memorizzato un dato che può variare durante l'esecuzione del programma.
Come abbiamo visto nella lezione precedente, PHP non è un linguaggio fortemente tipizzato. A differenza di linguaggi come il C o il Java in cui bisogna dichiarare il tipo di dato che conterrà una determinata variabile, in PHP possiamo assegnare alla stessa variabile diversi tipi di dato durante l'esecuzione dello script.
Un'altra differenza sostanziale è che la variabile non deve essere necessariamente dichiarata prima del suo utilizzo. Questo consente, quindi, di creare variabili al volo nel momento in cui ne abbiamo bisogno.
Le variabili in PHP sono delimitate dal carattere $
, seguito da un carattere alfabetico o da un underscore _
. I caratteri successivi al secondo possono contenere qualsiasi sequenza di cifre, caratteri alfabetici ed underscore. Analizziamo alcuni esempi di nomi per le variabili:
$variabile = 5; //valida
$_variabile = 5; //valida
$variabile_1 = 5; //valida
$variabile1 = 5; //valida
$1variabile = 5; //non valida, inizia con un carattere numerico
$_1variabile = 5; //valida
$111; //non valida, contiene solo caratteri numerici
Una variabile, come anticipato, può memorizzare un valore. Questo valore può essere impostato al momento della dichiarazione oppure può essere il risultato di un'operazione matematica o di una chiamata ad una funzione:
$a = 5;
$b = $a * 5; //$b = 25
$c = $b * $a; //$c = 25 * 5 = 125
$c = rand(0,5); //$c = valore casuale compreso tra 0 e 5
Bisogna prestare attenzione nell'utilizzare variabili a cui non sia stato assegnato precedentemente un valore. In questo caso verrà visualizzato un notice
, ovvero il tipo di errore meno grave presente di PHP:
echo $ciao;
stamperà a video un notice
simile al seguente:
PHP Notice: Undefined variable: ciao in php shell code on line 1
Il consiglio, quindi, è quello di assegnare sempre un valore iniziale ad una variabile, anche se questo valore può essere null
o false
.
Output delle variabili
Una volta che abbiamo definito una variabile, molto spesso abbiamo bisogno di stamparne il suo contenuto a video. Il costrutto più importante per stampare il contenuto di una variabile è stato introdotto nel corso degli articoli precedenti, esso si basa sull'istruzione echo
attraverso la quale possiamo visualizzare in output uno o più parametri.
$nome = "Simone";
echo "Il mio nome è $nome"; //Il mio nome è Simone
echo "Il mio nome è " . $nome; //Il mio nome è Simone
Possiamo anche passare il risultato di un'espressione direttamente al costrutto senza salvarlo prima in un'ulteriore variabile. I due esempi seguenti, infatti, sono identici nel risultato finale:
$a = 2;
$b = 2;
$c = $a * $b;
echo $c; //stamperà 4
echo $a * $b; //stamperà 4
Scope delle variabili
Lo scope di una variabile è l'area in cui essa è visibile durante l'esecuzione dello script, esso può essere di tre tipi:
- locale;
- globale;
- statico.
Scope locale
Una variabile dichiarata all'interno di una funzione ha uno scope locale e non ha visibilità al di fuori di essa.
function test_scope() {
$x = "scope locale";
echo $x; //stamperà scope locale
}
echo $x; //genererà un errore perché $x non è accessibile al di fuori della funzione
Scope globale
Una variabile dichiarata al di fuori di una funzione ha uno scope globale e non può essere accessibile all'interno di una funzione
$x = "scope globale";
function test_scope() {
echo $x; //genererà un errore perché $x non è accessibile all'interno della funzione
}
echo $x; //stamperà scope globale
La keyword global
Se vogliamo accedere al valore di una variabile globale all'interno di una funzione possiamo utilizzare la keyword global
. Attraverso di essa, infatti, possiamo bypassare la limitazione dello scope globale. Riprendendo l'esempio appena visto, richiamando la variabile attraverso global
il nostro codice non genererà un errore.
$x = "scope globale";
function test_scope() {
global $x;
echo $x; //stamperà scope globale
}
echo $x; //stamperà scope globale
Scope statico
Quando una funzione termina la sua esecuzione, il contenuto occupato dalle variabile dichiarate al suo interno viene liberato in memoria. Nel caso in cui non volessimo cancellare il suo contenuto possiamo dichiararla come static
. Vediamo due esempi, uno classico e uno che definisce la variabile come statica.
function test_static() {
$x = 0;
$x = $x+1;
echo $x;
}
test_static(); //stamperà 1
test_static(); //stamperà 1
test_static(); //stamperà 1
Definendo invece come statica la variabile:
function test_static() {
static $x = 0;
$x = $x+1;
echo $x;
}
test_static(); //stamperà 1
test_static(); //stamperà 2
test_static(); //stamperà 3
Variabili superglobali
PHP fornisce alcune variabili superglobali che sono sempre disponibili in tutti gli scope. Approfondiremo in dettaglio queste variabili in una lezione apposita, per ora ci limiteremo a darne una breve descrizione.
Variabile | Descrizione |
---|---|
$GLOBALS |
Contiene le variabili definite come globali attraverso la keyword global . |
$_SERVER |
Contiene gli header e le informazioni relative al server e allo script. |
$_GET |
Contiene i parametri passati tramite URL (es http://sito.com/?param1=ciao¶m2=test). |
$_POST |
Contiene i parametri passati come POST allo script (es.: dopo il submit di una form). |
$_FILES |
Contiene le informazioni relative ai file uploadati dallo script corrente attraverso il metodo POST. |
$_COOKIE |
Contiene i cookie. |
$_SESSION |
Contiene le informazioni relative alla sessione corrente. |
$_REQUEST |
Contiene tutti i parametri contenuti anche in $_GET , $_POST e $_COOKIE . |
$_ENV |
Contiene tutti i parametri passati all'ambiente. |
Variabili dinamiche
In circostanze molto particolari potrebbe accadere di non conoscere il nome di una determinata variabile e che tale informazione sia salvata all'interno di un'altra variabile. In questo caso è possibile utilizzare il contenuto di una variabile come variabile stessa:
$italiano = 'Ciao';
$lingua = 'italiano';
echo $$lingua . ', Simone';
stamperà:
Ciao, Simone