这个if语句是否相等?

时间:2015-07-19 19:54:15

标签: php if-statement

我遇到了一个php声明,正在思考,是

if(isset($_SESSION['id'])==1){

}

非常相似
if (isset($_SESSION['id']) && $_SESSION['id']==1){

}

2 个答案:

答案 0 :(得分:3)

让我们分解它。

isset($_SESSION['id']) == 1

第一部分isset()调用将返回一个布尔值(truefalse),具体取决于是否设置了会话ID。

当您使用==运算符比较整数值和布尔值时,整数将被强制(或强制 / 类型 - 变身)转换为布尔值。所以,如果整数是" truthy"值,即大于或等于1,则它将变为true。如果它低于或等于0,则它将变为false

换句话说,如果设置了会话,那么表达式将变为true === true(其计算结果为true)。如果未设置,则会转为false === true(评估为false)。

因此,总而言之,它可能不会按照您的想法行事。使用后者if语句。

答案 1 :(得分:2)

这些陈述并不等同。由于isset()返回TRUEFALSE,因此第一次测试:

if(isset($_SESSION['id'])==1){

}

完全等同于:

if(isset($_SESSION['id'])){

}

因为php会将1转换为布尔值TRUE,因此==运算符具有兼容类型。另一方面,第二个不仅测试是否设置了$_SESSION['id'],而且如果是,则测试值是否设置为1(在类型杂耍之后解析比较字符串与整数)。