PHP » Tipi di dati
Possiamo definire il PHP un linguaggio ''debolmente tipizzato'', in quanto l'assegnazione di valori di diverso tipo ad una stessa variabile non dà luogo a nessun tipo di errore né avvertimento. Non è quindi necessaria nessuna dichiarazione preventiva del tipo di dato che conterrà.
Tuttavia possiamo distinguere i dati nei seguenti tipi fondamentali:
- booleano (
bool) - intero (
intointeger) - virgola mobile (
floatodouble) - stringa (
string)
Esistono poi alcuni tipi di dati speciali:
- vettori e matrici (
array) - oggetti (
object) - risorse esterne (
resource) NULL
Per controllare tipo e valore di una variabile possiamo usare la funzione var_dump(). Se hai bisogno di una stampa leggibile del tipo in fase di debug del codice, usa gettype().
Tipi fondamentali
bool
Tipo di dato molto semplice che esprime il concetto di verità e può assumere due valori: TRUE o FALSE. Per assegnare un valore booleano in una variabile possiamo specificare direttamente i letterali TRUE o FALSE (maiuscole o minuscole) oppure assegnarvi il risultato di un confronto.
<?php $controllo = False; # assegnazione diretta
$controlla = ($var1 == $var2); # True se ($var1 = $var2)
?>
Conversioni
bool; la conversione è automatica se il contesto lo permette. Però possiamo usare il type casting con l'operatore (bool) da anteporre al valore da convertire. Saranno convertiti in FALSE i valori: zero (intero e in virgola mobile), stringa vuota ("") e contenente lo zero ("0"), gli array vuoti, gli oggetti senza variabili al loro interno, il NULL. Saranno TRUE tutti i valori numerici diversi da zero e le stringhe non vuote inclusa "0.0".integer
Gli interi in PHP possono assumere tutti i valori senza virgola compresi tra +2.147.483.647 e -2.147.483.647 (su piattaforme a 32bit). I numeri esterni a tali limiti sono considerati in virgola mobile (float).
Possiamo specificare un intero in notazione esadecimale (anteponendo al numero i caratteri '0x') o anche in ottale (anteponendo uno zero '').
<?php $d = 2048; // decimale $o = 0400; // ottale (dec. 256) $e = 0xFF; // esadecimale (dec. 255) ?>
Conversioni
(int) oppure la funzione intval(). Il PHP prevede però un automatismo chiamato type-juggling che cambia al volo i tipi di dato in base al contesto in cui sono usati. float
I numeri in virgola mobile in PHP possono essere scritti per esteso o usando la notazione esponenziale, o scientifica:
<?php $vm = 123.45; // notazione decimale (la virgola decimale si fa col punto!) $ne = 1.23e2; // notazione esponenziale: il numero è lo stesso ma con sole // 3 cifre significative (1.23 × 100 = 123.0) ?>
Una variabile di tipo float può contenere valori nell'intervallo ±1.8e308 (che equivale a 1.8 × 10 alla 308ª) con una precisione di 14 cifre significative.
string
Le stringhe sono sequenze di caratteri e sono le variabili più usate per il web. In PHP ogni carattere impiega un byte e non esiste un limite massimo imposto per la dimensione delle stringhe.
- apici singoli ('): il modo più semplice e immediato. Il testo non viene analizzato dal parser e qualsiasi sequenza viene restituita tale e quale. Agli apici all'interno della stringa vanno anteposti i backslash (\) quale sequenza di escape.
- doppi apici ("): sono da preferire agli apici singoli qualora si debba includere all'interno del testo uno più variabili o sequenze speciali di escape altrimenti non riconosciute. Tutti i valori delle variabili racchiuse tra doppi apici vengono sostituiti al nome della variabile. Sono riconosciute le sequenze \n (NL), \r (CR), \t (TAB), \" ("), \\ (\), \$ ($).
- sintassi Heredoc: equivalente ai doppi apici come funzionalità, non necessita però di sequenze di escape per le virgolette. Bisogna delimitare il testo con la sequenza [<<<] seguita da un identificatore, quindi chiudere con lo stesso identificatore isolato su una sola riga senza spazi o tabulazioni prima o dopo.
<?php $str_sing = 'Tra apici "sigoli", testo normale'; // apici singoli $str_dopp = "Egr. Sig. $cognome $nome,\n\n$txt"; // doppi apici $here_doc = <<<TXT Questa stringa è delimitata dall'identificatore "TXT" che funziona solo se il sistema lo trova isolato su una riga. TXT;
?>
Le stringhe possono essere concatenate dall'operatore "." (e non dal '+' che tenterebbe di trasformarle in numeri). Per manipolare le stringhe e gestirne le conversioni sono disponibili decine di funzioni dedicate.
Tipi composti
array
Un array è un tipo di dato speciale che possiamo immaginare come un contenitore con più valori, anche di diverso tipo, al suo interno. Tali dati possono essere gestiti in vari modi grazie alla notevole versatilità degli array. Ogni valore può essere associato infatti a un indice che può essere numerico o letterale. Vediamo ora come creare un array, usando la funzione array() e per assegnazione diretta:
<?php
$colori = array('bianco', 'nero', 'giallo', 'rosso', 'verde');
$colori[] = 'azzurro'; // aggiunge un colore dopo il verde
$colori[1] = 'grigio'; // metto il grigio al posto del nero
$colori['sfondo'] = 'blu'; // uso un indice letterale
$palette = array('sfondo' => 'blu' , 'colore' => 'giallo');
?>Possiamo accedere agli elementi dell'esempio precedente specificandone l'indice corrispondente tra parentesi quadre. Se, ad esempio, indichiamo in una espressione $palette['sfondo'] il valore che otterremo sarà 'blu'.
object
Un oggetto è un costrutto particolare che può includere al suo interno dati (chiamati proprietà) e funzioni per elaborarli (chiamati metodi). La sola definizione dell'oggetto prende il nome di classe e definisce la struttura dell'oggetto.
Per creare una variabile di tipo object si esegue un'assegnazione usando l'operatore new seguito dal nome della classe:
<?php $Ogg = new C; // $Ogg è un'istanza dell'oggetto della classe C
?>
Con la funzione is_a() possiamo verificare se una certa variabile fa riferimento ad un oggetto di una certa classe. Esistono varie altre funzioni per la gestione degli oggetti.
Tipi speciali
resource
Una risorsa è una variabile speciale che rappresenta un riferimento ad un oggetto esterno come un database, o un puntatore a un file. Queste variabili sono create e usate da funzioni speciali messe a disposizione dall'interprete e dalle relative estensioni. È quindi chiaro che non sono possibili (né tanto meno necessarie) conversioni di alcun tipo.
Possiamo controllare se una variabile fa riferimento ad una risorsa esterna con la funzione is_resource() ed è possibile verificare il tipo di risorsa con get_resource_type().
NULL
Il valore speciale NULL indica che una variabile no ha alcun valore. Questo è l'unico caso in cui il tipo coincide con il valore: un null può solo essere null.
Una variabile è considerata uguale a NULL se:
- non le è stato assegnato alcun valore;
- le è stata assegnata la costante
NULL(case insensitive); - è stata eliminata con unset().
Per controllare se il contenuto della variabile è esattamente NULL, non va però usato l'operatore di uguaglianza [==], bensì va utilizzata la funzione is_null(). Questo perché il type-juggling falserebbe il risultato.

