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:

Esistono poi alcuni tipi di dati speciali:

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
Normalmente non c'è bisogno di convertire esplicitamente un valore in un 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
Per convertire in intero un'espressione in virgola mobile o una stringa riconducibile a un numero possiamo usare il cast (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.

Per delimitare le stringhe di testo abbiamo 3 modi:
<?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:

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.