我遇到了一个php声明,正在思考,是
if(isset($_SESSION['id'])==1){
}
与
非常相似if (isset($_SESSION['id']) && $_SESSION['id']==1){
}
答案 0 :(得分:3)
让我们分解它。
isset($_SESSION['id']) == 1
第一部分isset()
调用将返回一个布尔值(true
或false
),具体取决于是否设置了会话ID。
当您使用==
运算符比较整数值和布尔值时,整数将被强制(或强制 / 类型 - 变身)转换为布尔值。所以,如果整数是" truthy"值,即大于或等于1,则它将变为true
。如果它低于或等于0,则它将变为false
。
换句话说,如果设置了会话,那么表达式将变为true === true
(其计算结果为true
)。如果未设置,则会转为false === true
(评估为false
)。
因此,总而言之,它可能不会按照您的想法行事。使用后者if语句。
答案 1 :(得分:2)
这些陈述并不等同。由于isset()
返回TRUE
或FALSE
,因此第一次测试:
if(isset($_SESSION['id'])==1){
}
完全等同于:
if(isset($_SESSION['id'])){
}
因为php会将1
转换为布尔值TRUE
,因此==
运算符具有兼容类型。另一方面,第二个不仅测试是否设置了$_SESSION['id']
,而且如果是,则测试值是否设置为1
(在类型杂耍之后解析比较字符串与整数)。