我正在使用filter_var
来验证布尔值,但我没想到它不会识别FALSE
。为什么会这样?
filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)
返回
null
答案 0 :(得分:5)
filter_var
是新的。你遇到了一个已知的错误: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)
答案 1 :(得分: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()中添加注释 实现要注意这是设计,即使代码 看起来有点不对劲。
结束不会修复。
答案 2 :(得分:0)
这是filter_var
首次引入版本5.2并在5.4之后的某个时刻解决的行为,如此https://3v4l.org/Cv1MZ
从版本5.4开始,这就是:
var_dump(filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
布尔(假)
更有意义。