Eheh grazie danix ^^ Lieto di riscrivere su questo forum
Cercherò di dare una spiegazione chiara del concetto.
Come saprai, php è un linguaggio a tipizzazione debole. Spiegandolo in breve, significa che non sei tenuto a rispettare particolari regole nella creazione o nell'utilizzo dei dati in relazione al loro tipo.
Pertanto, ad esempio, in php puoi inizializzare una variabile con un contenuto numerico e poi sostituirlo con un valore di tipo stringa, o passare un valore numerico ad una funzione che richiede valori stringa, oppure, e questo è il nostro caso, confrontare due valori di tipo differente. Php farà automaticamente le conversioni.
Relativamente ai confronti booleani, lo zero, le stringhe vuote ed il null equivalgono a FALSE, il resto equivale a TRUE.
Per cui, in una normale uguaglianza con l'operatore == ("equal") avremo:
0 == FALSE -> vero
"" == FALSE -> vero
null == FALSE -> vero
FALSE == FALSE -> vero
Come è lecito aspettarsi, questa conversione automatica può portare spesso ad errori. Pensiamo ad esempio ai valori di ritorno restituiti da determinate funzioni, come array_search().
array_search() cerca all'interno di un array un determinato valore e restituisce la chiave corrispondente. In caso non trovi nulla, restituisce FALSE.
Ipotizziamo di avere un array costituito nel seguente modo:
e di usare array_search per cercare "pippo" utilizzando la normale uguaglianza per verificare se il valore è stato trovato oppure no:
Codice: Seleziona tutto
if (array_search("pippo", $my_data) == false)
echo "non trovato";
else
echo "trovato";
la funzione array_search() trova pippo e restituisce la chiave corripondente, che è 0. Il valore 0 viene confrontato con false e, nella conversione del tipo dell'uguaglianza semplice, viene considerato uguale. Pertanto il risultato sarà "non trovato".
Per ovviare a questo problema, in php 4 è stato introdotto l'operatore === ("identical"), che oltre a confrontare il valore confronta anche il tipo di valore restituito.
Secondo questo operatore, avremo:
0 === FALSE -> falso
"" === FALSE -> falso
null === FALSE -> falso
FALSE === FALSE -> vero
Pertanto, se vogliamo rendere l'esempio di cui sopra funzionante, dovremo scrivere:
Codice: Seleziona tutto
if (array_search("pippo", $my_data) === false)
echo "non trovato";
else
echo "trovato";
ed in tal caso il risultato sarà "trovato", come dovrebbe essere lecito aspettarsi. L'operatore !== ("not identical") ovviamente agisce al contrario.