2.Php: Caratteristiche e Struttura
5. Caratteristiche di PHP

Vengono indicate le caratteristiche che denotano le specificità di PHP:

- È un motore di scripting SERVER SIDE(Lato Server) completamente open source;

- È un linguaggio che consente di inserire, all'interno del codice HTML, gli script PHP che saranno eseguiti sul server;

- Ha una sintassi semplice che assomiglia a quella di altri linguaggi molto utilizzati: C e JavaScript;

- È utilizzabile su piattaforme diverse con l'implementazione del motore di scripting;

- È dotato di un'ampia varietà di funzioni (array mono e multidimensionali, librerie grafiche, funzioni matematiche, gestione delle stringhe, connessioni HTTP, gestione completa della posta elettronica, librerie per XML);

- Supporta la connettività a database attraverso componenti standard (dBase, MySQL, PostgreSQL ecc...);

- Può essere installato e configurato come un modulo aggiuntivo del Web Server, ma può anche essere utilizzato come un modulo CGI separato.

6. La struttura sintattica del linguaggio

In questo capitolo vengono trattati i mattoni fondamentali del linguaggio PHP, in particolare le variabili, gli operatori, le espressioni e le istruzioni.

Si comincia con l’analisi dei tipi di dato, cioè la capacità di PHP di contenere informazioni diversificate in contenitori appositi in funzione della tipologia dell’informazioni stessa.

Si passa poi all’analisi delle variabili, che cosa sono e come si usano, quali sono le regole per convertire automaticamente il valore di una variabile in un tipo diverso, quali sono le differenze tra il passaggio di informazioni per valore e per riferimento.

L’ultima parte del capitolo è dedicata agli operatori disponibili in PHP, costrutti lessicali forniti nativamente dal linguaggio per consentire una scrittura del codice più snella e leggibile.

6_1.Tipi di dato

Nonostante PHP non sia un linguaggio con un forte controllo sui tipi, non si può prescindere dal concetto di “tipo di dato”.

Una buona progettazione del software prevede la corretta tipizzazione di tutti gli oggetti e di tutte le variabili che vengono utilizzate.

PHP gestisce nativamente 5 differenti tipi semplici per la classificazione dei dati:

  • i numeri interi;
  • i numeri in virgola mobile;
  • le stringhe;
  • i valori logici (booleani);
  • il tipo null.

Vi sono altre tipologie particolari di tipi di dati:

  • gli array (collezioni di elementi);
  • gli oggetti (elementi appartenenti a determinate classi);
  • le risorse (i file, le connessioni a database).

6_2.Numeri interi

I numeri interi sono i classici numeri. Una variabile intera è in grado di memorizzare un numero compreso tra –2.147.483.658 e +2.147.483.657 e la dimensione è quella tipica di un long su un’architettura a 32 bit.

Le variabili di tipo intero possono essere espresse indifferentemente nelle modalità decimale, ottale ed esadecimale.

In particolare, possiamo vedere lo script seguente che illustra alcuni dei possibili impieghi delle variabili intere:

<html>
   <head>
      <title>I numeri interi</title>
   </head>
   <body>
   <table border="1">
      <?php
         $interopositivo = 2147483658;
         $interonegativo = -2147483657;
         $ottale = 01426534;
         $esadecimale = 0x12AF;
         print("<tr><td>intero positivo</td><td>$interopositivo</td></tr>\n");
         print("<tr><td>intero negativo</td><td>$interonegativo</td></tr>\n");
         print("<tr><td>ottale convertito</td><td>$ottale</td></tr>\n");
         print("<tr><td>ottale originale</td><td>" . decoct($ottale) ."</td></tr>\n");
         print("<tr><td>esadecimale convertito</td><td>$esadecimale</td></tr>\n");
         print("<tr><td>esadecimale originale</td><td>" . dechex($esadecimale) ."</td></tr>\n");
   ?>
   </table>
   </body>
</html>

Come si può vedere vengono dichiarate alcune variabili e vengono immediatamente inizializzate con valori interi, alcuni decimali, uno in formato ottale e uno in formato esadecimale.

In realtà, il motore di PHP inizializza le variabili in un formato che è indipendente dalla loro rappresentazione. Infatti nel momento in cui una variabile intera viene stampata attraverso l’istruzione print(), senza utilizzare funzioni di conversione, quello che viene stampato è il suo valore di default, cioè la sua rappresentazione decimale.

Consideriamo per esempio questa dichiarazione:

$esadecimale = 0x12AF;

Se stampiamo il valore di questa variabile senza utilizzare nessuna funzione di conversione, cioè attraverso l’istruzione:

print("$esadecimale");

verrà stampata la stringa "4783" che è esattamente la rappresentazione decimale del numero esadecimale che era stato assegnato alla variabile in fase di inizializzazione.

Se invece utilizziamo una funzione di conversione in esadecimale attraverso l’istruzione:

print(dechex($esadecimale));

otteniamo la stampa della stringa "12af", cioè lo stesso valore che abbiamo utilizzato per l’inizializzazione della variabile.

Come si vede da questi esempi, il metodo per inizializzare una variabile all’atto della dichiarazione è assegnarle immediatamente un valore.

Nel caso di valori interi è possibile utilizzare indifferentemente una delle forme: decimale, ottale, esadecimale. In ogni caso, per evitare problemi di interpretazione con i valori, è necessario indicare esplicitamente al motore PHP il formato del numero che stiamo utilizzando per l’nizializzazione attraverso semplici regole sintattiche:

  • inizializzazione decimale: il valore deve essere un numero: $numero1 = 184627;
  • inizializzazione ottale: il numero deve iniziare con uno zero: $numero2 = 015237;
  • inizializzazione esadecimale: il numero deve iniziare con 0x: $numero3 = 0x12AF.

6_3.Numeri in virgola mobile

I numeri in virgola mobile sono numeri dotati di decimali dopo la virgola e i loro valori possono variare in un intervallo equivalente a quello del tipo double del linguaggio C. La dimensione di questo intervallo è strettamente dipendente dalla piattaforma. Vediamo un frammento di codice in cui sono utilizzati i numeri in virgola mobile:

<html>
   <head>
      <title>I numeri in virgola mobile</title>
   </head>
   <body>
   <table border="1">
      <?php
         $realpositivo = 2147483658.1234;
         $realnegativo = -214748365.43217;
         $realesponenziale = 3.2E9;
         print("<tr><td>numero reale positivo</td><td>$realpositivo</td></tr>\n");
         print("<tr><td>numero reale negativo</td><td>$realnegativo</td></tr>\n");
         print("<tr><td>notazione esponenziale</td><td>$realesponenziale</td></tr>\n");
      ?>
   </table>
   </body>
</html>

In questo caso vediamo che per inizializzare una variabile con un numero reale si utilizza la semplice sintassi:

$realpositivo = 2147483658.1234

cioè si assegna alla variabile il numero completo, dotato di parte intera, punto e decimali. Nel caso in cui il numero sia negativo è sufficiente aggiungere il segno meno prima del numero.

Per i numeri in virgola mobile, però, è possibile anche utilizzare la notazione esponenziale, cioè la forma:

$realesponenziale = 3.2E9;

Come si vede nella figura, in ogni caso, quando il numero viene stampato senza utilizzare particolari informazioni sul formato, non è detto che compaia esattamente come lo si è inserito nella variabile.

6_4.Stringhe

Le stringhe sono oggetti sequenziali contenenti una lista di caratteri e per distinguerle dal testo che le circonda, di solito dal codice PHP, è necessario includerle all’interno di particolari delimitatori.

In PHP questi delimitatori possono essere i singoli apici o i doppi apici.

La scelta del delimitatore è molto importante in quanto il motore di PHP tratta diversamente una stringa a seconda che sia racchiusa tra apici o tra doppi apici. Vediamo un esempio:

<html>
   <head>
      <title>Stringhe</title>
   </head>
   <body>
      <?php
         $variabilestringa  = "paperino";
         print("il valore della variabile $variabilestringa è $variabilestringa<br>");
         print('il valore della variabile $variabilestringa è $variabilestringa<br>');
         print('il valore della variabile $variabilestringa ' . "è $variabilestringa<br>");
         print('stampo un singolo apice: \' e un doppio apice: " <br>');
         print("stampo un singolo apice: ' e un doppio apice: \" <br>");
      ?>
   </body>
</html>

Come si può vedere il comportamento dell’istruzione print, che stampa una stringa sul flusso che viene spedito al browser, è diverso in funzione della tipologia della stringa, in particolare in funzione dei caratteri che vengono usati per delimitare la stringa.

La regola generale è che le stringhe racchiuse tra doppi apici vengono trattate sostituendone all’interno i nomi delle variabili con i rispettivi valori, mentre le stringhe racchiuse tra apici singoli non vengono trattate in alcun modo e vengono stampate così come sono.

Ecco spiegato il comportamento dello script di esempio: l’istruzione

print("il valore della variabile $variabilestringa è $variabilestringa<br>");

produce l’output:

il valore della variabile paperino è paperino

infatti il nome della variabile $variabilestringa viene sostituito con il suo valore. Invece, l’istruzione:

print('il valore della variabile $variabilestringa è $variabilestringa<br>');

produce l’output:

il valore della variabile $variabilestringa è $variabilestringa

In questo caso, visto che la stringa è racchiusa tra apici singoli, nessun nome di variabile viene sostituito con il suo valore e quindi la stringa viene stampata così com’è. Per ottenere il risultato che ci si aspetta, cioè la produzione dell’output corretto:

il valore della variabile $variabilestringa è paperino

è necessario utilizzare un’istruzione mista, eccola:

print('il valore della variabile $variabilestringa ' . "è $variabilestringa<br>");

In questo caso le due stringhe sono trattate in maniera diversa grazie ai loro delimitatori differenti e i due output vengono concatenati attraverso l’uso dell’operatore di concatenazione, il punto.

Nel caso si debbano utilizzare caratteri speciali all’interno delle stringhe è necessario utilizzare il carattere backslash per far capire al motore PHP la nostra intenzione. In particolare, i caratteri speciali inseribili all’interno di una stringa sono:

\' Singolo apice valido solo in stringhe delimitate da singolo apice
\" Doppio apice valido solo in stringhe delimitate da doppio apice
\\ Backslash
\n New line
\r Ritorno a capo
\t Tab orizzontale
\x00 - \xFF Caratteri esadecimali

È possibile, all’interno di uno script PHP, inserire interi elementi testuali complessi senza doversi preoccupare della gestione dei caratteri speciali, grazie alla particolare istruzione HERE che viene utilizzata nel modo seguente:

<html>
   <head>
      <title>HERE</title>
   </head>
   <body>
<?php
print <<< HERE
Questo è un testo che contiene indipendentemente apici singoli e apici doppi, possiamo per esempio inserire l'apostrofo e contemporaneamente le "doppie virgolette".

Qualsiasi elemento di impaginazione inserito nel testo, si tratti di spazi, di tabulazioni o di ritorni a capo, vengono ignorati.

HERE;
?>
   </body>
</html>

L’utilizzo è piuttosto semplice. Tutto quello che viene inserito tra le righe:

print <<< HERE

e

HERE;

viene stampato senza preoccuparsi di quello che c’è all’interno. Tale soluzione è molto pratica in quanto evita di dover convertire i caratteri speciali eventualmente presenti in elementi testuali magari inseriti da un utente o letti da un file.

6_5.Indicizzazione delle stringhe

Le variabili di tipo stringa sono sequenze di caratteri e PHP fornisce un comodo metodo per indicizzare i caratteri contenuti all’interno delle stringhe.

Vediamo il seguente esempio:

<html>
   <head>
      <title>Indicizzazione delle Stringhe</title>
   </head>
   <body>
      <?php
         $variabilestringa  = "paperino";
         print("Stringa originale: $variabilestringa{$i} <br><br>");
         print("Stringa verticale: <br>");

         for ($i=0;$i<strlen($variabilestringa);$i++)
         {
         print($variabilestringa{$i} . "<br>");
         }
      ?>
   </body>
</html>

L’obiettivo è ottenere una rappresentazione verticale di una stringa data, cioè stamparne i caratteri uno per riga.

A questo scopo viene utilizzato un ciclo for che inizia dal valore 0 e termina al valore dato dalla lunghezza della stringa decrementato di una unità.

Per ogni iterazione del ciclo viene stampato un singolo carattere della stringa utilizzando l’istruzione:

print($variabilestringa{$i} . "<br>");

Utilizzando quindi il nome della variabile stringa seguita da un indice racchiuso tra parentesi graffe si ottiene esattamente il carattere alla posizione puntata dall’indice.

Bisogna anche tener conto del fatto che le posizioni all’interno della stringa sono indicizzate a partire dalla posizione 0 e, quindi, l’ultimo carattere della stringa sarà nella posizione data dalla lunghezza della stringa decrementata di uno: ciò spiega la ragione dei valori degli indici nel ciclo.

Nelle vecchie versioni del motore PHP era consentito utilizzare le parentesi quadre, al posto delle graffe, per indicizzare i caratteri all’interno di una stringa.

Quella sintassi, però, è stata dichiarata obsoleta, e quindi ne è sconsigliato l’utilizzo, per non creare ambiguità sintattiche con l’indicizzazione degli elementi degli array (che vedremo più avanti).

6_6.Valori booleani

Si tratta di valori logici che possono contenere soltanto due tipi di informazione: TRUE o FALSE. Esse pertanto sono molto importanti, in quanto possono essere utilizzate come condizioni nelle istruzioni condizionali.

Per dichiarare una variabile booleana si utilizza la sintassi di questo esempio:

<html>
   <head>
      <title>Booleani</title>
   </head>
   <body>
      <?php
         $utenteregistrato  = TRUE;
         $utenteamministratore  = FALSE;
         if ($utenteregistrato)
         {
         print("Clicka <a href=\"\">qua</a> per modificare il tuo profilo<br>");
            if ($utenteamministratore)
            {
            print("Clicka <a href=\"\">qua</a> per accedere alla sezione amministrazione<br>");
            }
         }
         else
         {
         print("Clicka <a href=\"\">qua</a> per registrarti<br>");
         }
      ?>
   </body>
</html>

Quando si utilizzano le istruzioni condizionali è possibile utilizzare come condizione variabili di qualsiasi tipo: sarà il motore di PHP a convertire la variabile in un oggetto booleano.

Questo comportamento è molto interessante in quanto ci permette di scrivere codice sofisticato e pulito. Vediamo l’esempio seguente:

<html>
   <head>
      <title>Conversioni Booleane</title>
   </head>
   <body>
      <?php
         $mariti = 1;
         $statocivile = "";
         $nome = "Mariella";

         if ($mariti)
         { $statocivile = "coniugata"; }
         else
         { $statocivile = "nubile"; }

         if (!$nome)
         { $nome = "sconosciuta"; }

         print("Cara $nome, il tuo stato civile è <b>$statocivile</b>");
      ?>
   </body>
</html>

Si nota subito che come condizioni delle istruzioni condizionali sono state utilizzate variabili di tipo intero e di tipo stringa, ma queste sono state convertite in valori booleani per dar modo al motore PHP di decidere quale porzione di codice eseguire.

In particolare, si vede che le variabili $mariti = 1 e $nome = "Mariella" sono state convertite nel valore TRUE e la stringa finale è stata trasformata di conseguenza.

Se proviamo a cambiare il valore alle suddette variabili inizializzandole in questo modo:

$mariti = 0;
$nome = "";

Le regole generali per le conversioni di variabili di qualunque tipo in valori booleani sono elencate di seguito.

  • Una variabile numerica il cui valore è 0 viene convertita in FALSE, se invece il valore è diverso da 0 viene convertita in TRUE.
  • Una variabile stringa il cui valore è una stringa vuota oppure la stringa "0" viene convertita in FALSE; in caso contrario viene convertita in TRUE.
  • Un array con zero elementi viene convertito in FALSE; se ha almeno un elemento viene convertito in TRUE.
  • Un qualunque oggetto istanziato viene convertito in TRUE.
  • Il valore NULL viene convertito in FALSE.

Questo pacchetto di regole di conversione permette di scrivere codice flessibile e snello senza perdersi in conversioni forzate che rendono il codice più complesso e difficile da comprendere.

6_7.Il tipo NULL

Indica l’assenza di valore o, nel caso degli oggetti, l’assenza di un’istanza.

Viene normalmente utilizzato per annullare il valore di una variabile o per eliminare un oggetto che ormai non serve più.

Vediamo un frammento di codice che utilizza la costante NULL:

<html>
   <head>
      <title>Uso di NULL</title>
   </head>
   <body>
      <?php
         $nome = "Mariella";
         $nome = NULL;

         if ($nome)
         { print("Ciao $nome, benvenuta<br>\n");}
         else
         { print("Non ci conosciamo?<br>\n");}
      ?>
   </body>
</html>

Come si può vedere nella Figura 2.9, poiché la variabile $nome è stata associata alla costante NULL il suo valore viene perso e di conseguenza la conversione in booleano, necessaria per poterla inserire come condizione nell’istruzione if, restituisce FALSE: ecco spiegato il motivo del risultato dell’esecuzione.

6_8.Variabili

In qualunque linguaggio di programmazione esiste la possibilità di associare una zona di memoria a un nome mnemonico in modo da potervi memorizzare le informazioni e poterle recuperare quando servono.

Per ottenere questo comportamento si fa uso delle variabili, componenti del linguaggio che consentono di identificare con un nome una certa zona di memoria per poterla utilizzare come contenitore di informazioni.

Come abbiamo visto negli esempi precedenti, la sintassi per dichiarare una variabile è la seguente:

$nome = "Mariella";

PHP è un linguaggio che non impone la dichiarazione preventiva di una variabile, né la sua tipizzazione: questo comportamento è tipico di molti linguaggi interpretati.

Non è quindi necessario indicare al motore PHP quale tipologia di informazioni saranno contenute all’interno della zona di memoria cui la nostra variabile fa riferimento.

Esistono però alcune regole di nomenclatura che è necessario conoscere per evitare di scontrarsi con errori di sintassi prodotti dall’interprete PHP, in particolare:

  • il nome di ogni variabile deve iniziare con il carattere “dollaro” $;
  • il nome, oltre che dal carattere $, può essere composto esclusivamente da lettere, numeri o caratteri di sottolineatura “underscore”;
  • il primo carattere del nome, dopo il carattere $, non può essere un numero.

Di conseguenza abbiamo che $i, $name, $_password sono nomi validi, mentre $1, $-password, $nome? non possono essere utilizzati come nomi per le variabili.

La dichiarazione di una variabile è di solito accompagnata da una inizializzazione manuale. Come nel caso precedente, l’istruzione: $nome = "Mariella"; consente di creare una variabile e assegnarle automaticamente un valore. Per l’assegnamento viene utilizzato il classico segno di uguale.

In linea generale non esiste alcuna differenza tra la dichiarazione di una variabile e il suo utilizzo successivo all’interno del codice dello script. Infatti, in questa porzione di codice:

...
$nome = "Mariella";
...
$nome = "Paolino";
...

non c’è modo di capire se la prima istruzione è l’effettiva dichiarazione con assegnamento del primo valore oppure è un utilizzo classico di una variabile all’interno dello script della pagina.

Come detto in precedenza, le variabili referenziano una particolare zona di memoria; dal momento che la memoria a disposizione non è infinita e, in generale, le prestazioni di un sistema dipendono anche dalla quantità di memoria che questo occupa, è bene essere parsimoniosi e utilizzare la memoria in maniera intelligente.

Quando poi è necessario utilizzare grandi quantitativi di memoria è consigliabile liberarla manualmente cancellando le variabili dal proprio script, cioè eliminando l’associazione del nome mnemonico alla zona di memoria cui questo fa riferimento. Questo può essere fatto manualmente, come visto in precedenza, attraverso l’utilizzo della costante NULL.

6_8.Variabili per valore

Le variabili in PHP vengono passate solitamente per valore, questo significa che quando una variabile viene associata a un’altra in realtà è il suo valore che viene inserito nella zona di memoria referenziata dalla variabile di destinazione.

Vediamo uno script di esempio:

<html>
   <head>
      <title>Variabili per valore</title>
   </head>
   <body>
      <?php
         $mittente = "Paolino Paperino";
         $destinatario = $mittente;
         $mittente = "Pietro Gambadilegno";

         print('$mittente: ' . "$mittente: <br>\n");
         print('$destinatario: ' . "$destinatario: <br>\n");
      ?>
   </body>
</html>

In particolare, possiamo notare che grazie all’istruzione $destinatario = $mittente; alla variabile $destinatario viene assegnata una copia del valore presente nella variabile $mittente.

Il fatto, poi, che quest’ultima venga modificata alterandone il contenuto non ha nessun effetto sulla prima variabile.

6_9.Variabili per riferimento

Talvolta, però, può essere comodo avere due variabili che puntino alla stessa zona di memoria.

Questo comportamento in PHP è realizzabile grazie all’utilizzo delle variabili per riferimento, i cosiddetti “puntatori”.

Per associare a una variabile lo stesso valore, e quindi la stessa zona di memoria, di un’altra variabile, si utilizza la sintassi:

$destinatario = &$mittente;

L’elemento che contraddistingue questa sintassi dal precedente metodo di assegnamento è il carattere & che è stato inserito alla destra dell’uguale e che indica al motore PHP che questa volta non deve associare alla variabile alla sinistra dell’uguale un valore che sia copia del valore della variabile a destra, ma, molto più semplicemente, deve associare il nome mnemonico della variabile a sinistra alla stessa zona di memoria della variabile a destra.

In questo caso, avremo due variabili diverse che puntano alla stessa zona di memoria e quindi se si agisce su una variabile per modificarne il contenuto la stessa modifica sarà recepita dall’altra.

Se proviamo a sostituire la nuova sintassi nello script precedente otteniamo il risultato presentato nella Figura 2.11. In particolare, quello che accade è che quando viene modificato il valore della variabile $mittente si ottiene una modifica speculare anche alla variabile $destinatario per il fatto che entrambe puntano alla stessa zona di memoria.

Le costanti sono elementi importanti di qualsiasi applicazione, ampiamente utilizzate, per esempio, nei file di configurazione.

La differenza sostanziale tra una variabile e una costante è che quest’ultima ha un valore che, dopo l’assegnamento, non può più essere modificato.

Per dichiarare una costante si utilizza la sintassi:

define("DATABASE_USER","username");

mentre, per utilizzarne il valore, si usa il classico metodo:

print(DATABASE_USER);

È tradizione stilistica scrivere le costanti utilizzando le lettere maiuscole in quanto questo metodo consente di individuarle con più facilità all’interno del codice.

In realtà è possibile anche scrivere le costanti utilizzando sintassi alternative: il motore PHP non vi darà errore, ma il formalismo stilistico è consolidato e se volete fare in modo che il vostro codice sia familiare a chi lo legge dovrete uniformarvi scrivendo i nomi delle costanti in caratteri maiuscoli.

6_10.Regole di conversione

Le variabili vengono usate, in PHP come in qualunque altro linguaggio di programmazione, all’interno di espressioni o passate come parametri alle funzioni.

PHP, come detto in precedenza, è un linguaggio che invece di un rigido controllo sui tipi cerca di interpretare nel migliore dei modi i tipi che vengono utilizzati.

Nel caso in cui ci siano incongruenze tra i tipi, oppure vengano usate per certe operazioni delle variabili che hanno un tipo diverso da quello che la logica vorrebbe, PHP è quasi sempre in grado di utilizzare ugualmente le variabili convertendone il tipo in maniera automatica attraverso una serie di regole di conversione.

Per fare un esempio, vediamo il codice seguente:

$numero = 54;
print($numero);

La funzione print si aspetta un parametro di tipo stringa, ma poiché quello che viene passato è un numero, il motore di PHP converte automaticamente il tipo della variabile da numerico a stringa in modo che la funzione print possa comunque essere eseguita.

Il risultato dell’esecuzione di questo codice, infatti, è esattamente la stampa della stringa "54".

Le regole di conversione applicate automaticamente dal motore di PHP sono evidenziate nel seguito.

Caso 1

Se ci si aspetta un valore numerico e viene fornita una stringa, PHP elimina eventuali spazi e lettere di troppo e utilizza soltanto i numeri contenuti nella stringa, se il numero che ci si aspetta è intero allora vengono scartate anche le eventuali cifre dopo la virgola e la virgola stessa.

Per esempio il codice:

$stringa = "345.23aaa";
print($stringa + 2);

produce in output la stringa "347.23".

Caso 2.

Se ci si aspetta un valore booleano e viene fornita una stringa, questa viene convertita nel valore FALSE se la stringa è vuota o se è uguale a "0"; in caso contrario la stringa viene convertita in TRUE.

Caso 3.

Se ci si aspetta un valore booleano e viene fornito un valore numerico questo viene convertito nel valore FALSE se il numero è zero. In caso contrario viene convertito in TRUE.

Caso 4.

Se ci si aspetta una stringa e viene fornito un valore numerico questo viene convertito nella stringa contenente esattamente quel valore.

Caso 5

Se ci si aspetta un numero intero e viene fornito un numero in virgola mobile questo viene convertito in intero eliminandone la parte decimale.

Caso 6

Se ci si aspetta una stringa e viene fornito un valore booleano questo viene convertito nella stringa "1" se il valore del booleano è TRUE, se invece è FALSE viene convertito in una stringa vuota.

Caso 7

Se ci si aspetta un valore numerico e viene fornito un valore booleano questo viene convertito nel valore 1 se il valore del booleano è TRUE, nel valore 0 se invece è FALSE.

Caso 8

Se ci si aspetta un valore numerico e viene fornito un array, questo viene convertito in un numero il cui valore è il numero degli elementi contenuti nell’array.

Caso 9

Se ci si aspetta un valore booleano e viene fornito un array, questo viene convertito nel valore TRUE se l’array ha almeno un elemento, nel valore FALSE in caso contrario.

Caso 10

Se ci si aspetta un valore stringa e viene fornito un array, questo viene convertito in una stringa contenente il valore "array".