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 stringNell'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 nientementre
$a = 1; Function stampa () { global $a; echo $a; } stampa(); // stampa 1A 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 worldProseguiamo con gli array. E' bene ricordare che PHP non fa distinzione fra array scalari (l'indice dell'array è un numero intero) e array associativi (l'indice è una stringa). Il modo più semplice per inizializzare un'array è 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 3Gli 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
$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 9Esistono 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.
echo "$PATH"; // stampa il contenuto della variabile d'ambiente PATH echo "$HTTP_USER_AGENT"; // stampa il nome e la versione del browseroppure 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 httpPer 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 costanteNe esistono alcune già valorizzate come la costante matematica M_PI (p-greco) che ovviamente vale 3.14etcetcetc.
Data creazione HTML: Gennaio 2000
Autore: Francesco Munaretto
E-mail: NoSpam@thank.you