[英]PHP validation booleans using filter_var
我正在使用filter_var
來驗證布爾值,但我沒想到它不能識別FALSE
。 為什么會這樣?
filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)
回報
null
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)
聽起來這實際上是它應該如何工作,奇怪的是(是的,我的思緒被吹得那么)。 來自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()實現中彈出注釋,注意這是設計的,即使代碼看起來有點錯誤。
關閉不會修復。
這是filter_var
最初在5.2版本中引入並在5.4之后的某個時刻解決的行為,如此https://3v4l.org/Cv1MZ所示
從版本5.4開始,這是發生的事情:
var_dump(filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
布爾(假)
這更有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.