05. Variabili

Le variabili sono dei contenitori che vengono usati per memorizzare tutti i tipi di dato che PHP ci mette a disposizione, e i tipi di dato che possiamo creare noi attraverso la programmazione ad oggetti che affronteremo più avanti.

I nomi delle variabili devono obbligatoriamente cominciare con il carattere del dollaro $, e possono contenere numeri e lettere sia maiuscole che minuscole, a patto che il primo carattere dopo il $ non sia un numero ma una lettera o un underscore.

L'unico simbolo ammesso è proprio l'underscore (trattino basso _ ).
Di seguito riporto alcuni esempi :

$variabile = 5; // corretto
$3variabile = "cinque"; // errore : inizia con un numero (3)
$variabile3 = "cinque"; // corretto
$_variabile5_ = 9.8; // corretto
$minnie&topolino = 0; // errore : simbolo non consentito

E' possibile memorizzare un valore in una variabile mediante l'operatore di assegnazione "=".
Se alla destra dell'operatore = c'è un'altra variabile invece di un valore costante, viene creata una copia del valore e inserita nella variabile a sinistra in questo modo :

$y = 5; // non vengono create copie, viene direttamente assegnato il valore 5 a $y
$x = $y; // viene creata una copia di $y e viene inserita in $x

E' possibile specificare di non creare una copia, ma di assegnare il valore per riferimento, anteponendo al nome della variabile, a destra dell'operatore "=" di assegnazione, il simbolo della E commerciale (&).
Questo significa che se viene modificata la prima variabile, tutte le variabili assegnativi per riferimento punteranno al nuovo valore.

$x = 5;
echo $x; // stampa 5

$y = &$x;
echo $y; // stampa 5

$x = 8;
echo $y; // stampa 8

Come illustrato nel capitolo Lessico, i nomi delle variabili sono Case Sensitive.

Le variabili possono assumere una visibilità (scope) diversa a seconda di dove vengano dichiarate o se vengono esplicitamente definite come Globali o Statiche.

Se dichiariamo una variabile all'interno di una funzione, ad esempio, essa non sarà visibile all'esterno di questa.
Se invece dichiariamo una variabile come Globale allora sarà accessibile in tutto il codice, anche se dichiarata in un file esterno, a patto che quest'ultimo ovviamente venga incluso.

Di seguito un esempio di visibilità con una funzione :

$x = 2;

function miaFunzione()
{
	$x = 5;
	echo $x;
} // stampa 5

echo $x; // stampa il valore 2

Non dichiarando la $x prima di "miaFunzione()", l'ultima istruzione non avrebbe stampato niente, dal momento che una variabile all'interno di "miaFunzione()", è visibile esclusivamente all'interno della funzione stessa.



Variabili statiche e globali

Vediamo ora un esempio di variabile Globale e un altro di variabile Statica :

/* Esempio di variabile globale */

$x = 100;
$y = $x + 5;

function miaFunzione()
{
	global $x;
	echo "x : $x - y : $y";
}

miaFunzione(); // stampa "x : 100 - y : " perchè non abbiamo specificato anche $y come globale


/* Esempio di variabile statica */

function funzione()
{
	static $x = 0;
	$x++;
	echo "x : $x";
}

funzione(); // stampa 1
funzione(); // stampa 2

Nel primo esempio abbiamo visto un modo per accedere alle variabili che non ci sono visibli, perchè dichiarate all'esterno.
Un altro modo è attraverso l'array super globale $GLOBALS :

$x = 5;

function miaFunzione()
{ echo "x : " . $GLOBALS['x']; } // stampa 5

Nell'esempio della variabile Statica, invece, abbiamo visto che dichiarando una variabile in tal modo, PHP non la distrugge alla fine dell'esecuzione della funzione, ma rimane disponibile ad ogni chiamata della suddetta funzione fino al termine dell'intero script.



Funzioni standard per le nostre variabili

Per agire in modo sicuro sulle variabili, PHP ci mette a disposizione molte funzioni.
Illustrerò di seguito le 3 più importanti ed usate :

isset() - Restituisce TRUE se la variabile esiste o FALSE se non esiste.

echo isset($variabile); // stampa false
$variabile = 5;
echo isset($variabile); // stampa true

unset() - Distrugge la variabile specificata senza tornare alcun valore.

$variabile = 5;
echo $variabile; // stampa 5
unset($variabile);
echo $variabile; // non stampa nulla

empty() - Restituisce FALSE se la variabile non è vuota e diversa da zero.

echo empty($variabile); // stampa true
$variabile = 5;
echo empty($variabile); // stampa false