filter_input()
提及的文档:
请求变量的值成功,如果过滤器失败则为FALSE, 如果未设置variable_name变量,则返回NULL。
在网上研究了各种例子之后,我惊讶地发现他们中没有一个(我至少知道)检查过值FALSE
。大多数示例仅检查NULL
值:
if ( is_null( filter_input( INPUT_POST, 'name', FILTER_SANITIZE_STRING ) ) ) {
// display error
}
这有什么理由吗?或者是否有一个真实的例子来检查FALSE
值?如果是这样,你愿意提供这个例子,以便我可以从中受益。
另外,您是否愿意提供filter_input可能失败的情况。非常感谢。
答案 0 :(得分:1)
这是因为!0是真的。为什么?加入!您正在进行布尔检查,因此您的变量将被转换。根据{{3}}:
转换为布尔值时,以下值被视为FALSE:
the boolean FALSE itself
the integer 0 (zero)
the float 0.0 (zero)
the empty string, and the string "0"
因此整数0转换为false,而所有其他整数转换为true。
这就是你需要对false或null进行类型安全检查的原因,因为如果因某种原因失败,filter_input()
会返回值
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
if ($name === false) {
//filter failed
}
if ($name === null) {
//variable was not set
}