Quello che stiamo per affrontare è probabilmente uno degli argomenti più "oscuri" nella programmazione PHP spesso ignorato anche dai programmatori con una certa esperienza. Perché allora dovremmo parlarne? Principalmente per 2 motivi. Se infatti conoscete già altri linguaggi (ad esempio C, C++, Java, VisualBasic, Pascal) alcuni comportamenti di PHP vi sembreranno alquanto anomali ed inspiegabili rispetto a ciò che è stato il vostro modo di programmare fino a questo momento. Ed anche se siete alle prime armi è importante conoscere questo argomento in modo da non incorrere in errori che sembrerebbero inspiegabili.
Ma forse è meglio vedere subito un esempio semplice ma efficace:
<?php
echo '5' * '3';
?>
Abbiamo chiesto al PHP di mostrarci il risultato di una moltiplicazione tra due stringhe. Questa operazione non ha alcun senso eppure se lanciamo lo script otteniamo come risultato "15" ovvero il prodotto tra dei numeri contenuti all'interno della stringa. Per capire cosa sia successo vediamo i singoli passi che hanno portato a questo risultato:
Il PHP quindi effettua in maniera trasparente, ovvero senza una esplicita indicazione, delle conversioni di tipo ogni qualvolta deve effettuare una operazione su un tipo di dati diverso da quello atteso. Ovviamente questa conversione può portare a risultati privi di significato: "casa" * "3" sarà uguale a 0 poiché la stringa "casa" non sottintende un valore numerico e perciò sarà convertita nel numero 0.
Vediamo ora un esempio di conversione da numero a stringa:
<?php
echo 'un numero a caso: ' . 43;
?>
E' evidente che in questo caso il numero 43 verrà convertito in stringa prima di essere accodato attraverso l'operatore "." che lavora solo su stringhe.
Il caso più interessante di conversione di tipo però è quello che da come risultato il tipo booleano. Come accennato nella precedente lezione a proposito degli operatori logici, spesso capita che il PHP debba eseguire un'operazione e si aspetta che i dati su cui lavorare siano di tipo booleano (come nella condizione del costrutto if) ma invece gli vengono forniti dati di altro tipo (interi, stringhe, array). PHP procederà quindi ad una conversione che seguirà queste regole.
Come sarà chiarito dal seguente esempio, l'uso di diversi tipi di dati e la loro implicita conversione in booleano permette di scrivere codice molto compatto ed efficace.
<?php
$array = array();
// conversione implicita da array a booleano
if($array)
{
echo 'l\'array $array ha almeno un elemento <br>';
}
else
{
echo 'l\'array $array è vuoto <br>';
}
$stringa = 'ciao';
// conversione implicita da stringa a booleano
if($stringa)
{
echo 'la stringa $stringa vale ' , $stringa;
}
else
{
echo 'la stringa $stringa è vuota';
}
$numero = 123;
// conversione implicita da numero a booleano
if($numero)
{
echo 'la variabile $numero è diversa da 0';
}
else
{
echo 'la variabile $numero è uguale a 0';
}
?>