Guida a PHP: variabili e tipi di dati

Introduzione

Nell’introduzione a questa guida su PHP ho accennato al fatto che i frammenti di codice PHP possono essere inseriti all’interno delle pagine HTML: per distinguere chiaramente il codice PHP da quello HTML il primo dev’essere racchiuso tra opportuni tag:

<?php
// Questo è un commento su linea singola

/* Questo è un commento
suddiviso in
più righe */
?>

Il codice PHP è dunque racchiuso tra il tag di apertura (<?php) e quello di chiusura (?>); se la vostra pagina contiene solamente codice PHP, potete omettere il tag di chiusura.
I commenti, ricalcando lo stile di linguaggi come C/C++, possono essere inseriti in una singola riga (preceduti dalla coppia di caratteri slash //) o continuare su più righe (racchiusi tra i simboli /* e */); tutti i caratteri che seguono il doppio slash // (fino al termine della riga) o sono racchiusi tra /* e */ vengono completamente ignorati da PHP.

Variabili

Le variabili sono contenitori temporanei per memorizzare le informazioni che usiamo nella nostra applicazione: in PHP – a differenza di linguaggi come C++ o Java – non è necessario dichiarare il tipo delle variabili prima di utilizzarle, poiché questo viene determinato di volta in volta, cioè in ogni istruzione in cui compare tale variabile, sulla base de:

  • il valore assegnato (numero, stringa, booleano, lista, …);
  • il contesto in cui occorre, ossia il tipo del valore di una variabile (o un’espressione, intesa come combinazione di variabili ed operatori) in una determinata istruzione.

Nomi delle variabili

Il nome di una variabile è contraddistinto dal carattere del dollaro ‘$’ seguito dal nome vero e proprio che abbiamo deciso di assegnarle: i caratteri concessi sono lettere, cifre e il carattere underscore ‘_’, ad eccezione del carattere iniziale che può essere solo una lettera o l’underscore.

<?php
$stringa = "prima stringa";
$numero_intero = 42;
$numero_decimale = 3.14;
?>

Tipi di dati

PHP è un linguaggio debolmente tipizzato, ossia le variabili non devono essere dichiarate prima dell’uso e non sono vincolate a memorizzare valori di un tipo specifico; tale libertà nasconde tuttavia delle insidie a cui bisogna prestare attenzione, una fra tutte il comportamento degli operatori, che varia a seconda del tipo degli argomenti (le variabili) coinvolte.

Operatori

A seconda del tipo assegnato da PHP alle variabili, certi operatori possono comportarsi in modo ambiguo e difficilmente predicibile, arrivando a fornire risultati inaspettati; non essendo associato a ciascuna variabile un tipo specifico, non è sempre facile predirne con esattezza il risultato di un’operazione; come se non bastasse, PHP non esegue alcun controllo statico per verificare se una certa variabile abbia un valore (e conseguentemente un tipo) sensato rispetto al contesto in cui viene utilizzata.

Cosa succeda dunque se si usa una variabile con un valore di un certo tipo in un contesto completamente “estraneo” è una domanda che ci si può porre più spesso di quanto si possa pensare; per avere una risposta a questa domanda, per imparare ad utilizzare nel modo corretto le variabili e a predire con la maggior accuratezza possibile l’esito e il risultato delle operazioni e delle istruzioni si rivela dunque necessario – se non fondamentale – comprendere la gestione del tipi in PHP.

<?php
// ESEMPIO: comportamento degli operatori in relazione ai tipi

$stringa = "prima stringa";
$numero_intero = 42;
$numero_decimale = 3.14;
// 'echo' è l'istruzione di stampa ed accetta come argomento una stringa
// 'echo $variabile;' stampa il contenuto della variabile '$variabile'
// OSSERVAZIONE: la seconda e terza stampa richiedono una conversione da numero a stringa
echo $stringa; // stampa: prima_stringa
echo $numero_intero; // stampa: 42
echo $numero_decimale; // stampa: 3.14

// Inizializzo due variabili x e y con valori di tipo stringa
$x = "prima stringa";
$y = "seconda stringa";
// Cosa conterrà la variabile z, prodotto delle stringhe x e y?
$z = $x*$y;

// Se uso una stringa come espressione di test, PHP effettua una conversione da stringa a booleano
if($x) { /*...*/ }
?>

Valore atteso e conversioni implicite

In fase di esecuzione, se PHP rivela una discrepanza tra il tipo di una variabile (o del valore restituito da un’espressione) ed il tipo atteso in un certo contesto, effettuerà (con esiti più o meno prevedibili) una conversione dal tipo della variabile o dell’espressione al tipo atteso; ad esempio, se un’espressione di test (usata cioè come condizione) restituisce un valore differente dalla coppia di possibili valori vero/falso, PHP tenterà la conversione.

Per avere un’idea di precisa circa il comportamento degli operatori a seconda del tipo delle variabili e l’esito delle conversioni implicite, consiglio di consultare questa tabella contenuta nella documentazione ufficiale di PHP.

<?php
// ESEMPIO: comportamento degli operatori in relazione ai tipi
$stringa = "42";
$numero_intero = 12;
echo $stringa + $numero_intero; // stampa: 54
// La stringa "42" viene convertita nel numero decimale corrispondente
// quindi sommata a 12 e il risultato dell'espressione viene stampato in output
?>

Conversioni esplicite

Talvolta può rivelarsi utile o necessario forzare espressamente l’assegnazione di un certo tipo T2 ad una variabile, cui magari PHP assegnerebbe un tipo differente T1: in questo caso si può ricorrere ad una conversione esplicita, un’istruzione che indica chiaramente il tipo da assegnare alla variabile; da sottolineare che tale conversione forzata si applica solamente all’istruzione in cui viene invocata, mentre a partire dall’istruzione successiva sarà nuovamente PHP ad assegnare in piena autonomia il tipo della variabile in questione.

La sintassi è la seguente: (T2)$variabile; la conversione ha precedenza su qualsiasi altra operazione in cui la variabile sia coinvolta nella medesima istruzione.

Prossimamente

Nei prossimi articoli analizzeremo con attenzione i tipi supportati da PHP, cercando di mettere in luce le possibili trappole ed insidie in cui si può incorrere e di capire come evitarle.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...