PHP - 如果==不适用于0或""

时间:2014-05-30 03:05:12

标签: php if-statement

我正在使用if查询检查请求的验证,

if ($request_userid == $userid) {
...
}

这是按预期工作的。但进一步的测试表明,如果$request_userid$userid为0或“”,则条件为真,脚本运行if查询但不应该。

我目前正在解决它:

if ($userid == "" ) {
exit ("exit");
}

但我不认为这是正确的方法吗?

你能解释为什么它不适用于if查询以及检查它的正确方法是什么?

4 个答案:

答案 0 :(得分:3)

这是the PHP page on comparison operators

您使用双等号进行松散比较。将其更改为三等号,它将按类型和值进行检查。

另请参阅booleans & casting上的此页面。

'' == 0求值为TRUE的原因是整数0在转换为布尔值时转换为FALSE。空字符串('')也会转换为FALSE。因此,您的比较最终看起来像if (false == false),这是真的。

答案 1 :(得分:1)

您可以使用

if ($request_userid === $userid && $userid != "" )

答案 2 :(得分:1)

  

为什么它不能与if查询一起使用?

因为您使用==比较运算符比较类型,然后使用""让我们说$ userid =" SpongeBob"会匹配。

  

检查它的正确方法是什么?

现在,如果你使用===比较运算符,你将比较相等,你将比较它们是否相同,$ userid =" SpongeBob"不会与""

匹配

答案 3 :(得分:1)

只需将逻辑更改为:

if ((!empty($request_userid) && !empty($userid)) && ($request_userid === $userid)) {
...
}

当您执行0时,null==将始终相等,后者会比较两种不同的数据类型;即:null0。但===确保两个值具有相同的类型。因此0null永远不会与===匹配。 !empty()检查是另一级验证,确保===永远不会发生,除非$request_userid$userid 100%不为空。

也就是说,您目前用于解决此问题的条件将起作用:

if ($userid == "" ) {
   exit ("exit");
}

但我建议将其更改为:

if (empty($userid)) {
   exit ("exit");
}

在一天结束时,这不是一个混乱或混乱,而只是一种处理验证用户输入的现实的方法。