OPERARE CON LE VARIABILI DI PHP3
I mattoni per la costruzione di un programma php sono le
variabili e gli array. Impariamo ad usare questi elementi fondamentali del
linguaggio insieme agli operatori più comuni
In
php esistono 7 tipi di variabili. I quattro dei quali ci occuperemo in questo
articolo posso essere schematizzati nella tabella seguente
integer |
Numeri interi |
double |
Numeri in virgola
mobile |
string |
Stringhe |
array |
Array scalari o
associativi |
Anche in php, come in molti altri
linguaggi di scripting, non è necessario dichiarare le variabili che useremo
nel programma. Per inizializzare una variabile basta semplicemente scriverne il
nome, preceduto dal carattere $, ed assegnarle un valore usando l'operatore = .
Generalmente non serve specificare il tipo di una variabile poiché viene deciso
automaticamente dall'interprete in base al contesto in cui la variabile stessa
viene usata, vediamo:
$var = "0"; // $var e' una stringa (ASCII 48)
$var++; // $var e' la stringa "1" (ASCII 49)
$var += 1; // $var ora e' un intero (2)
$var = $var + 1.3; // $var ora e' un numero in virgola mobile (3.3)
$var = 5 + "10 + qualcosa"; // $var e' un intero (15)
$var = 5 + "qualcosa + 10"; // $var e' un intero (5)
|
All'occorrenza però possiamo eseguire sia
una definizione che una conversione di tipo usando rispettivamente la funzione
settype() oppure un'operazione di casting. I cast più comuni sono:
(int), (integer) |
Conversione in intero |
(real), (double), (float) |
Conversione in numero
a doppia precisione |
(string) |
Conversione in stringa |
(array) |
Conversione in array |
settype($b, integer); // $b e' un intero
$a = 10; // $a è un intero
$b = (double) $a; // $b è un numero in virgola mobile
// verifichiamo
echo gettype($b); // stampa double
$c = 1; // $c è un intero
$d = (string) $c; // $d è la stringa "1" (ASCII 49)
// verifichiamo
echo gettype($d); // stampa string
|
Nell'esempio abbiamo usato anche la
funzione gettype() che ci ha permesso di verificare se la variabile $b fosse
davvero un double dopo averla sottoposta alla conversione di tipo. Per quanto
riguarda l'esistenza del valore di una variabile è utile ricordare come essa
sia direttamente condizionata dal contesto in cui la variabile viene usata o
dichiarata. Ciò significa che le variabili interne alle funzioni create dal
programmatore vengono viste solo dalla medesima funzione e non dal resto del
programma. Allo stesso modo, quindi, il valore delle variabili usate nel corpo
principale dello script non può essere utilizzato nelle funzioni senza prima
aver globalizzato tali variabili con il comando global.
$a = 1;
Function stampa () {
echo $a;
}
stampa(); // non stampa niente
|
mentre
$a = 1;
Function stampa () {
global $a;
echo $a;
}
stampa(); // stampa 1
|
A volte può tornare utile usare variabili
il cui nome è esso stesso variabile: praticamente una variabile di variabile.
Il trucco consiste nell'usare un doppio dollaro $$
$a = "hello";
$$a = "world";
echo "$a $hello"; // stampa hello world
echo "$a ${$a}"; // stampa hello world
|
Proseguiamo con gli array. E' bene
ricordare che PHP non fa distinzione fra array scalari (l'indice dell'array e'
un numero intero) e array associativi (l'indice e' una stringa). Il modo più
semplice per inizializzare un'array e' quello di assegnare un valore ai suoi
elementi
$a[0] = 1; // array scalare
$a[1] = 2;
$b[0] = 1;
$b[] = 2; // $b[1] = 2;
$b[] = 3; // $b[2] = 3;
$c["uno"] = 1; // array associativo
$c["due"] = 2;
|
oppure possiamo usare le funzioni array() o
list()
$a = array(1, 2, 3, 4, 5); // array scalare
echo $a[0]; // stampa 1
$b = array("uno" => 1,
"due" => 2,
"tre" => 3); // array associativo
echo $b["tre"]; // stampa 3
|
Gli array monodimensionali, inoltre, sono
utili per risalire al valore selezionato in un menu html multiplo creato con il
tag <select>. Vediamo
<html>
<head>
<title>Menu a scelte multiple</title>
</head>
<body>
<form method=post action=http://localhost/menu.php3>
<select multiple name=colori[]>
<option value=rosso>Rosso
<option value=verde>Verde
<option value=blu>Blu
</select>
<input type=submit value=Ok> <input type=reset value=Annulla>
</form>
</body>
</html>
|
Dopo aver preparato il menu passiamo alla
creazione dello script che ci dirà quali colori sono stati scelti
<?php
echo "Hai selezionato i colori:<p>";
while(list($indice, $valore) = each($colori)) {
echo "$valore<br>";
}
?>
|
Se php è stato compilato con l'opzione
--enable-tarck-vars, od almeno configurato abilitando nel file /usr/local/lib/php3.ini
il parametro track_vars, è possibile accedere al contenuto di due array
associativi globali ($HTTP_POST_VARS o $HTTP_GET_VARS) generati durante l'uso
dei metodi POST o GET del protocollo HTTP. Questi array contengono infatti le
coppie chiave-valore dei campi di input del form html. Ecco un metodo per
stamparne i valori
echo "Valori inviati via POST:<br>";
while (list($chiave, $valore) = each($HTTP_POST_VARS)) {
echo "$chiave => $valore<br>";
}
|
Notiamo come sia stata usata la funzione
each() per il trattamento dell'array in congiunzione con il costrutto list() il
quale consente l'assegnazione di un gruppo di variabili con un'unica operazione.
In sostanza each() restituisce le coppie chiave-valore in un array composto da 4
elementi. Questi elementi so le chiavi 0, 1, key e value. Gli elementi 0 e key
puntano agli indici dell'array associativo, mentre 1 e value ne contengono i
valori
$a = ("Manuela" => 20 , "Serena" => 16, "Chiara" => 27);
$b = each($a);
/*
$b contiene le seguenti coppie chiave/valore
0 => "Manuela"
1 => 20
key => "Manuela"
value => 20
*/
|
Vediamo ora il comportamento di each() nel
contesto di un array scalare
$a = ("Manuela", "Serena", "Chiara");
$b = each($a);
/*
$b contiene le seguenti coppie chiave/valore
0 => 0
1 => "Manuela"
key => 0
value => "Manuela"
*/
|
Anche gli array possono essere definiti
dinamicamente. In questo caso però bisogna fare attenzione a non creare
ambiguità. Infatti se scriviamo $$a[1], php non sa se intendiamo usare
l'elemento $a[1] come variabile oppure $$a come variabile con indice 1. La
sintassi corretta per i due casi è ${$a[1]} e ${$a}[1]. Per gestire gli array
sono state create numerose funzioni. Le più usate nono quelle di ordinamento
come sort() che ordina afabeticamente gli elementi dell'array
$lettere = array("a", "z, "c", "b");
sort($lettere);
for(reset($lettere); $indice = key($lettere); next($lettere)) {
echo "lettere[$indice]=$lettere[$indice]<br>";
}
/* stampa
lettere[0]=a
lettere[1]=b
lettere[2]=c
lettere[3]=z
*/
|
o asort() usata per ordinare gli array
associativi mantenendo l'originale associazione dell'indice
$cognomi = array("a" => "Rossi",
"b" => "Bianchi",
"c" => "Verdi");
sort($cognomi);
for(reset($cognomi); $indice = key($cognomi); next($cognomi)) {
echo "cognomi[$indice]=$cognomi[$indice]<br>";
}
/* stampa
cognomi[b]=Bianchi
cognomi[a]=Rossi
cognomi[c]=Verdi
*/
|
Le misteriose funzioni key(), next() e
reset() sono spiegate in questa tabella
key(array) |
Ritorna l'indice
dell'elemento corrente dell'array |
next(array) |
Fa avanzare di un
elemento la posizione del puntatore interno all'array |
reset(array) |
Sposta il puntatore al
primo elemento dell'array |
ed il loro uso nel ciclo for è
perfettamente lecito. Infatti reset() inizializza il contatore del ciclo, key()
è l'espressione condizionale e next() è l'incremento. Qust'ultima farà
avanzare il puntatore interno all'arry fino all'ultimo elemento + 1 causando la
restituzione di un valore booleano falso e la conseguente interruzione del
ciclo. Infine, per contare il numero di elementi di un array si può far
affidamento alla funzione sizeof()
$a = (1, 2, 3, 4, 5);
echo sizeof($a); // stampa 5
|
OPERATORI ED ESPRESSIONI
In un linguaggio completo come php non
potevano mancare i classici operatori aritmetici
$a + $b |
Addizione |
$a - $b |
Sottrazione |
$a * $b |
Prodotto |
$a / $b |
Quoziente |
$a % $b |
Modulo (resto del
quoziente) |
seguiti a ruota dagli operatori logici
più usati
! $a |
Not |
Ritorna vero se $a non
è vero |
$a && $b |
And |
Ritorna vero se $a e
$b sono veri |
$a || $b |
Or |
Ritorna vero se $a o
$b è vero |
Ci sono anche gli operatori di comparazione
$a == $b |
Uguale |
Ritorna vero se $a è
uguale a $b |
$a != $b |
Non uguale |
Ritorna vero se $a non
è uguale a $b |
$a < $b |
Minore di |
Ritorna vero se $a è
minore di $b |
$a > $b |
Maggiore di |
Ritorna vero se $a è
maggiore di $b |
$a <= $b |
Minore o uguale a |
Ritorna vero se $a è
minore o uguale a $b |
$a >= $b |
Maggiore o uguale a |
Ritorna vero se $a è
maggiore o uguale a $b |
L'unico operatore disponibile per le
stringhe è quello di concatenazione scritto usando il carattere punto.
$a = "concateno ";
$b = $a . "due stringhe"; // $b = "concateno due stringhe"
|
Un uso particolare che si può fare
dell'operatore di assegnazione = consiste nel combinarlo con un operatore
aritmetico
$a = 3;
$a += 2; // $a vale 5
$b = $a -=5; // $a e $b valgono 0
$c = 3; $c *= 3; // $c vale 9
|
Esistono infine anche gli operatori unari
di pre/post incremento/decremento, rispettivamente ++ e --
$a = 3;
$b = pow($a++, 2); // $b vale 9 (3 alla seconda)
$c = pow(++$a, 2); // $c vale 25 (5 alla seconda)
|
Nell'esempio precedente è stata usata la
funzione pow(), uno dei tanti comandi predefiniti di php per eseguire calcoli
matematici. pow(), dunque, è l'operazione di elevamento a potenza e richiede
come parametri la base e l'esponente.
COSTANTI E VARIABILI SPECIALI
PHP inserisce le variabili d'ambiente
attivate dalla sessione di esecuzione dello script all'interno delle proprie
strutture e rimangono lì fino a quando il programma non avrà termine. Si può
quindi conoscere il valore di una particolare variabile d'ambiente stampandone
semplicemente il contenuto
echo "$PATH"; // stampa il contenuto della variabile d'ambiente PATH
echo "$HTTP_USER_AGENT"; // stampa il nome e la versione del browser
|
oppure ricorrendo alla funzione getenv()
passandole come argomento il nome della variabile cercata
$server_web = getenv("SERVER_SOFTWARE");
echo $server_web; // stampa nome e versione del server http
|
Per avere la lista completa di tutte le
variabili disponibili, più qualche altra informazione, si può usare la
funzione phpinfo()
<?php phpinfo(); ?>
Tra le variabili speciali di php, ce ne
sono due in particolare che potrebbero aiutarci qualora volessimo utilizzare
delle immagini cliccabili. Il concetto di fondo è quello di predisporre una
sorta di mappa sulla quale cliccare ed ottenere tante risposte diverse tante
quante sono le aree dell'immagine. PHP in questo caso mette a disposizione le
variabili sub_x e sub_y, ovvero le coordinate del punto su cui si clicca.
L'esempio seguente ne farà uso. Per semplicità usiamo una immagine (figura.gif)
divisa in quattro aree colorate ognuna grande 100x100 pixel. Creiamo il form
usando il file gif per il campo di input
<html>
<head>
<title>Immagine cliccabile</title>
</head>
<body>
<form method=post action=http://localhost/mappa.php3>
<input type=image src=mappa.gif name=sub>
</form>
</body>
</html>
|
A questo punto prepariamo il codice php che
stamperà il colore della porzione d'immagine cliccata
<?php
echo "Coordinate: x=$sub_x; y=$sub_y<p>";
if ($sub_x < 100 && $sub_y < 100) {
echo "Hai cliccato sul rosso";
}
if ($sub_x > 100 && $sub_y < 100) {
echo "Hai cliccato sul verde";
}
if ($sub_x < 100 && $sub_y > 100) {
echo "Hai cliccato sul blu";
}
if ($sub_x > 100 && $sub_y > 100) {
echo "Hai cliccato sul giallo";
}
?>
|
Le coordinate vengono inviate al server web
per mezzo della variabile sub del tag html <input>. Poi php provvederà a
convertirla in sux_x e sub_y. Concludiamo dedicando qualche riga anche alle
costanti. Per definirle occorre usare la funzione define()
define("COSTANTE", "sono una costante");
echo COSTANTE; // stampa sono una costante
|
Ne esistono alcune già valorizzate come la
costante matematica M_PI (p-greco) che ovviamente vale 3.14etcetcetc.
Avanti Indietro