2015-07-19 67 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(在用於解析比較具有整數的字符串的類型雜耍之後)。