这两个if语句相等吗?


Are this if statements equal?

我遇到一个PHP语句,正在思考,是

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

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

我们来分析一下。

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

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

当您使用==操作符将整数值与布尔值进行比较时,整数值将被强制转换(或强制转换/类型切换)为布尔值。因此,如果整数是一个"真"值,即大于或等于1,那么它将被转换为true。如果它小于或等于0,那么它将变成false

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

所以,总的来说,它可能并不像你想象的那样。使用后一个if语句

语句不相等。因为isset()返回TRUEFALSE,所以第一个测试:

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

等价于:

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

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