我碰到一個PHP語句,並在想,是這是if語句是否相等?
if(isset($_SESSION['id'])==1){
}
非常相似
if (isset($_SESSION['id']) && $_SESSION['id']==1){
}
我碰到一個PHP語句,並在想,是這是if語句是否相等?
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語句。
實際上根據[手冊](http://php.net/manual/en/language.operators.comparison.php),當你比較一個布爾值(在左邊)用一個整數使用==,整數值被強制爲一個布爾值,而不是相反。你可以通過比較'true'和2(或其他非零值)來測試它們。它們仍然會相等,因爲所有的非零整數值都轉換爲'true' .. –
@TedHopp你是對的。我弄錯了方向。修復。謝謝你抓住它:) –
的陳述是不等價的。因爲isset()
傳回TRUE
或FALSE
,第一測試:
if(isset($_SESSION['id'])==1){
}
是完全等效於:因爲PHP轉換1
爲布爾值TRUE
if(isset($_SESSION['id'])){
}
所以==
運營商具有兼容的類型。另一方面,不僅測試$_SESSION['id']
是否被設置,而且如果是,是否將該值設置爲1
(在用於解析比較具有整數的字符串的類型雜耍之後)。
而你的問題是......? – Rizier123
你有'var_dump();'調試php的gratest,用'die'使用它;'一步一步看看,什麼東西正在返回,並且你將能夠找出自己 – Viral
isset()返回TRUE如果var存在且具有除NULL以外的值,那麼如果$ _SESSION ['id']存在並且其值不等於NULL,則isset($ _SESSION ['id'])== 1'將始終爲TRUE。 – Danijel