2012-02-03 12 views
6

ブール値の検証にfilter_varを使用していますが、FALSEを認識できないとは思わなかったです。なぜこれが起こるのですか?filter_varを使用したPHP検証ブール

filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)

戻り

null

+2

bool FALSEを検証しますか? – rcs20

+1

これを読んでください:http://www.devshed。PHP/PHP/5/1/ – rcs20

+0

の場合、TRUEがTRUEを返しますが、FALSEを返すのはなぜでしょうか? nullを返します。 – RS7

答えて

5

filter_varは、PHP 5.2のように、新しいです。あなたは既知のバグに遭遇しました:https://bugs.php.net/bug.php?id=49510 このバグに投票したりコメントしたりしてください。あなたはこのような何かをしようとしている

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

を、このような安価な回避策がいくつかあります:

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

これは、動作するようになっていますどのように実際にあるようですね、奇妙なことに十分に(はい、私の心はそれによって吹かれました)。 https://bugs.php.net/bug.php?id=51344

から、これは根本的な フィルタコードを見てきましたときに非常識な音に起こっているが、これは マニュアルに従って、実際に正しい:filter_inputのデフォルトの動作()のため NULLを返すことです検証に失敗した場合はfalseを返します。 FILTER_NULL_ON_FAILUREは、存在しない入力が の場合はその動作をfalseに単純に反転し、検証に失敗するとNULLを返します。 (いいえ、私は が役に立ちませんが、それは役立つかもしれませんし、filter_input()コンテキストでフラフの名前は です。なぜなら、それはNULLが通常返されないことを意味するからです。存在しない入力ケースを持っていない にfilter_var()で使用感。)

[テーブルが原因で省略SOの書式設定]

私はfilter_inputにコメントをポップます

()とfilter_input_array() コードは のように見えますが、これは仕様であることに注意してください。

閉じることはできません。

0

filter_varが最初のバージョン5.2で導入され、5.4の後にいくつかの時点で解決されたとき、これは何が起こるかであるバージョン5.4から始まって、このhttps://3v4l.org/Cv1MZ

で見られるようにこれが動作した:

var_dump(filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); 
これMAK

ブール値(false)を

もっと意味がある。

関連する問題