2012-02-03 7 views
6

Sto utilizzando filter_var per convalidare valori booleani ma non mi aspettavo che non riconoscesse FALSE. Perché succede?booleali di convalida PHP utilizzando filter_var

filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)

rendimenti

null

+2

si desidera convalidare il bool FALSE? – rcs20

+1

leggi questo: http: //www.devshed.com/c/a/PHP/Validating-Boolean-Values-and-Float-Numbers-with-Filters-in-PHP-5/1/ – rcs20

+0

beh, mi chiedo perché "TRUE" restituisca VERO ma 'FALSE' restituisce null – RS7

risposta

5

filter_var è nuova a partire dal PHP 5.2. Hai riscontrato un bug noto: https://bugs.php.net/bug.php?id=49510 Sentiti libero di votare o commentare quel bug.

si sta cercando di fare qualcosa di simile:

$v = filter_var($v, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) 

Ci sono una serie di soluzioni alternative a buon mercato come questo:

$v = $v===FALSE ? FALSE : filter_var($v, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) 
2

Sembra che questo è in realtà come si suppone di lavorare, abbastanza stranamente (sì, la mia mente è stata soffiata da quello). Da https://bugs.php.net/bug.php?id=51344

Ciò sta andando suonare folle quando hai guardato il codice filtro di base, ma questo è in realtà corretta in base alla documentazione : il comportamento predefinito di filter_input() è quello di restituire NULL per input inesistenti e false quando la convalida non riesce e FILTER_NULL_ON_FAILURE inverte semplicemente tale comportamento a false per gli input inesistenti e NULL in caso di errore di convalida. (No, non ho un indizio in cui sarebbe utile, e il nome della bandiera è sfortunato nel contesto filter_input(), poiché implica che NULL non verrebbe normalmente restituito. senso quando utilizzato con filter_var(), che non ha il caso di ingresso inesistente.)

[tavolo omesse a causa di formattazione SO]

farò un salto un commento nel filter_input() e filter_input_array() implementazioni per notare che questo è di progettazione, anche se il codice sembra un po 'sbagliato.

Chiusura non risolvibile.

0

Questo è stato il comportamento quando filter_var stata introdotta con la versione 5.2 e risolti ad un certo punto, dopo 5.4 come si vede da questa https://3v4l.org/Cv1MZ

A partire dalla versione 5.4 questo è ciò che accade:

var_dump(filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); 

bool (false)

che mak ha molto più senso.

Problemi correlati