Voglio riportare qui un mio vecchio articolo del 2011 pubblicato su Nerdsopolis ancora attualissimo che evidenzia l’importaza di uno 0 in un linguaggio a tipizzazione dinamica come PHP.
Scenario: stai programmando in PHP e attraverso un’espressione condizionale IF vuoi eseguire qualcosa solo nel caso in cui un determinato valore sia presente in un array.
Nella condizione si farà quindi ricorso alla funzione array_search che restituisce la chiave dell’elemento quando il suo valore è presente nell’array:
if(array_search('quelCheCerco',$array)) { // eseguo il mio codice }
Problema: nonostante tutto il nostro script ha comportamenti inaspettati, facciamo prove su prove e talvolta, anche quando siamo certi della presenza di un elemento nell’array, il codice non scatta… A volte sì, a volte no… Lo scenario peggiore per uno sviluppatore.
Spiegazione: se array_search trova il valore nella prima posizione di un array indicizzato numericamente, restituirà la sua chiave [0] che, nella verifica della condizione, equivale ad un bel FALSE!!!
Soluzione: una volta capito questo, il problmea è di facile soluzione, basta infatti impostare lo script in modo da eseguire una comparazione stretta::
if(array_search('quelCheCerco',$array) !== FALSE) { // eseguo il mio codice }
Osservazione: riguardando oggi la reference, noto che rispetto al 2011 c’é un simpatico box di warning che avverte proprio di questa cosa… evidentemente non sono stato l’unico a snervarsi davanti a questo problema!
Warning
This function may return Boolean
FALSE
, but may also return a non-Boolean value which evaluates toFALSE
. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
Lascia un commento