我遇到一个PHP语句,正在思考,是
if(isset($_SESSION['id'])==1){
}
与
非常相似if (isset($_SESSION['id']) && $_SESSION['id']==1){
}
我们来分析一下。
isset($_SESSION['id']) == 1
第一部分,isset()
调用,将返回一个布尔值(true
或false
),取决于是否设置了会话id。
当您使用==
操作符将整数值与布尔值进行比较时,整数值将被强制转换(或强制转换/类型切换)为布尔值。因此,如果整数是一个"真"值,即大于或等于1,那么它将被转换为true
。如果它小于或等于0,那么它将变成false
。
换句话说,如果设置了会话,那么表达式将被转换为true === true
(计算结果为true
)。如果未设置,则将其转换为false === true
(计算结果为false
)。
所以,总的来说,它可能并不像你想象的那样。使用后一个if语句
语句不相等。因为isset()
返回TRUE
或FALSE
,所以第一个测试:
if(isset($_SESSION['id'])==1){
}
等价于:
if(isset($_SESSION['id'])){
}
因为php将1
转换为布尔值TRUE
,所以==
运算符具有兼容的类型。另一方面,第二个代码不仅测试是否设置了$_SESSION['id']
,而且,如果设置了,还测试值是否设置为1
(在类型杂耍以解析字符串与整数的比较之后)。