PHP non è un linguaggio fortemente tipizzato, questa particolarità ci consente di assegnare alla stessa variabile più tipi di dato all'interno della stessa esecuzione del codice. Il tipo di dato, quindi, è associato al valore e non alla variabile. Sulla base di quanto detto, vediamo insieme quali sono i dati di dato supportati dal PHP.
Boolean - valori booleani (vero, falso)
Il tipo di dato boolean serve a rappresentare i valori "vero" o "falso" all'interno di espressioni logiche.
<?php
$vero = true;
$falso = false;
$vero = 1 && 1;
$falso = 1 && 0;
$vero = 1 || 0;
$falso = 0 || 0;
?>
Integer - valori interi
I valori interi sono rappresentati da cifre positive e negative comprese in un intervallo che dipende dall'architettura della piattaforma (32 o 64 bit). I valori minimo e massimo sono rappresentati attraverso la costante PHP_INT_MAX
.
<?php
$intero = 1;
$intero = 1231231;
$intero = -234224;
$intero = 1 + 1;
$intero = 1 - 1;
$intero = 3 * 4;
?>
Float o double - numeri in virgola mobile
I valori con cifre decimali sono rappresentati mediante l'utilizzo del .
e non della ,
come nel nostro sistema. Anche il loro intervallo dipende dall'architettura di riferimento ma mediamente vengono supportate fino a circa 14 cifre dopo la virgola. Bisogna prestare attenzione a non usare questo tipo di dato per valori precisi, come nel caso in cui si ha a che fare con valute. In quel caso bisognerebbe utilizzare invece le funzioni di BCMath.
<?php
$float = 10.3;
$float = -33.45;
$float = 6.1e6; // 6,1 * 10^6 => 6.100.000
$float = 3E-7; // 3 * 10^-7 => 3/10.000.000 = 0,0000003
?>
String - testi o stringhe di caratteri
Una stringa è un insieme di caratteri. Contrariamente a quanto accade in linguaggi come il C, in PHP non è necessario definire la dimensione massima della stringa ma in ogni momento si può modificare il contenuto senza prima verificare se la variabile può contenere una determinata stringa. Una stringa può essere delimitata dal carattere '
(apice singolo) o dal carattere "
(doppio apice). Il delimitatore utilizzato per determinare l'inizio di una stringa deve essere utilizzato anche per indicarne il suo termine.
<?php
$stringa = "ciao come stai?";
$stringa = 'ciao come stai?';
$stringa = "lei mi ha chiesto 'come stai?'";
$stringa = 'lei mi ha chiesto "come stai?"';
//stringhe non valide perché contengono lo stesso carattere di apertura
//all'interno della stringa
$stringa_non_valida = "lei mi ha chiesto "come stai?"";
$stringa_non_valida = 'lei mi ha chiesto 'come stai?'';
//utilizzare il backslash, \, per impiegare il carattere di apertura all'interno della stringa
//tale operazione viene definita escaping delle stringhe
$stringa_valida = "lei mi ha chiesto \"come stai?\"";
$stringa_valida = 'lei mi ha chiesto \'come stai?\'';
?>
Come è possibile notare, il backslash
deve essere utilizzato come carattere di escape quando si vuole includere nella stringa lo stesso tipo di carattere che la delimita; se mettiamo un backslash davanti ad un apice doppio in una stringa delimitata da apici singoli (o viceversa), anche il backslash entrerà a far parte della stringa stessa. Il backslash viene usato anche come "escape di sé stesso" nei casi in cui si desideri includerlo esplicitamente in una stringa.
<?php
echo "Questo: \"\\\" è un backslash"; // stampa: Questo: "\" è un backslash
echo 'Questo: \'\\\' è un backslash'; // stampa: Questo: '\' è un backslash
echo "Questo: '\' è un backslash"; // stampa: Questo: '\' è un backslash
echo "Questo: '\\' è un backslash"; // stampa: Questo: '\' è un backslash
?>
Nel caso utilizzassimo il carattere "
per delimitare una stringa, sarà possibile inserire delle variabili all'interno della stessa. In questo caso la variabile verrà automaticamente interpretate dal PHP e convertita nel valore assegnato ad essa ("esplosione della variabile"):
<?php
$nome = "Simone";
$stringa = "ciao $nome, come stai?"; //ciao Simone, come stai?
$stringa = 'ciao $nome, come stai?'; //ciao $nome, come stai?
?>
Attraverso il carattere .
(operatore di concatenazione) è poi possibile concatenare più stringhe:
<?php
$stringa1 = "Ciao ";
$nome = "Simone";
$stringa2 = ", come stai?";
$stringa = $stringa1 . $nome . $stringa2; //Ciao Simone, come stai?
?>
La notazione heredoc, poco utilizzata se non in situazioni nelle quali è necessario specificare stringhe molto lunghe, consente di delimitare una stringa con i caratteri <<<
seguiti da un identificatore; a questo scopo in genere si usa EOD
, ma è solo una convenzione, è possibile utilizzare qualsiasi stringa composta di caratteri alfanumerici e underscore, di cui il primo carattere deve essere non numerico (la stessa regola dei nomi di variabile). Tutto ciò che segue questo delimitatore viene considerato parte della stringa, fino a quando non viene ripetuto l’identificatore seguito da un punto e virgola. Attenzione: l’identificatore di chiusura deve occupare una riga a sé stante, deve iniziare a colonna 1 e non deve contenere nessun altro carattere (nemmeno spazi vuoti) dopo il punto e virgola.
<?php
$nome = "Simone";
$stringa = <<<EOD
Il mio nome è $nome
EOD;
echo $stringa;
?>
Il codice proposto stamperà la stringa "Il mio nome è Simone" Infatti la sintassi heredoc risolve i nomi di variabile così come le virgolette. Rispetto a queste ultime, con tale sintassi abbiamo il vantaggio di poter includere delle virgolette nella stringa senza farne l’escape:
Array
Un array (o vettore) può essere considerato come una matrice matematica. In PHP esso rappresenta una variabile complessa che restituisce una mappa ordinata basata sull'associazione di coppie chiave -> valore
. La chiave di un array può essere un numero o di tipo stringa, mentre il valore può contenere ogni tipo di dato, compreso un nuovo array. Approfondiremo gli array più avanti nella sezione ad essi dedicata.
<?php
$array = array(); //array vuoto
$array = []; //array vuoto nella nuova sintassi
$array = array('a', 'b', 'c');
$array = array(1, 2, 3);
?>
Oggetti
Gli oggetti, o istanze di classe, sono dei tipi di dato più complessi che vengono trattati approfonditamente nell'apposita guida su PHP e la programmazione orientata agli oggetti.