2015-07-19 68 views
-6

我碰到一个PHP语句,并在想,是这是if语句是否相等?

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

} 

非常相似

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

} 
+1

而你的问题是......? – Rizier123

+0

你有'var_dump();'调试php的gratest,用'die'使用它;'一步一步看看,什么东西正在返回,并且你将能够找出自己 – Viral

+0

isset()返回TRUE如果var存在且具有除NULL以外的值,那么如果$ _SESSION ['id']存在并且其值不等于NULL,则isset($ _SESSION ['id'])== 1'将始终为TRUE。 – Danijel

回答

3

让我们来分解它。

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

的第一部分,isset()调用,将返回一个布尔值(truefalse),这取决于如果会话ID设置与否。

当比较的整数值与一个布尔值,使用操作者==,整数将被强制(或/型颠倒)转换成一个布尔值。所以,如果整数是“真值”,即大于或等于1,那么它将变成true。如果它低于或等于0,那么它将变成false

换句话说,如果会话已设置,则表达式将变为true === true(其值为true)。如果没有设置,则会变成false === true(其值为false)。

因此,总之,它可能不会做你认为它做的事。使用后者if语句。

+0

实际上根据[手册](http://php.net/manual/en/language.operators.comparison.php),当你比较一个布尔值(在左边)用一个整数使用==,整数值被强制为一个布尔值,而不是相反。你可以通过比较'true'和2(或其他非零值)来测试它们。它们仍然会相等,因为所有的非零整数值都转换为'true' .. –

+0

@TedHopp你是对的。我弄错了方向。修复。谢谢你抓住它:) –

2

的陈述是不等价的。因为isset()传回TRUEFALSE,第一测试:

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

} 

是完全等效于:因为PHP转换1为布尔值TRUE

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

} 

所以==运营商具有兼容的类型。另一方面,不仅测试$_SESSION['id']是否被设置,而且如果是,是否将该值设置为1(在用于解析比较具有整数的字符串的类型杂耍之后)。