2014-03-13 27 views
0

我有這樣的代碼更改數據庫的值設置爲false並沒有改變結果

if (true == $run_user['online'] { 
    $result = 'Online now!'; 
} else { 
    $date = $run_user['lastloggedin']; 
    $result = Agotime($date); 
} 

$run_user是順便 所以要檢查數據庫每當我在數據庫中,以虛假更改值,它將仍然只是結果"Online Now!"而不是說它應該說什麼,這是例如1 hour ago.

+1

因爲它們是字符串而不是布爾值。因此,在使用寬鬆比較時('=='),它們總是如此。 –

+0

@JohnConde哇,沒有意識到這是簡單的,好吧,謝謝反正! :) – ImSchnebz

回答

1

@約翰孔德說得對,但我可以闡述實際發生的事情。

在PHP中,有些東西將留給解釋。布爾檢查就是其中之一。這裏是一個東西,這將在布爾檢查來解釋幾列:

這些將被解釋爲TRUE

  • 布爾真,當然
  • 非空字符串
  • 任何非零整數
  • 的函數,對象或數組

這些將被解釋爲FALSE

  • 布爾值false
  • 整數0
  • 空字符串
  • 的不(!)字符,後面的解釋真或布爾真

這些可能有時會令人困惑,但最好的檢查方法是確保喲你知道你傳遞給條件的變量是什麼類型。有時,它可能是有用的,用嚴格的比較,像這樣:

if(true === $variable){ ... } 

第三等號將告訴PHP只能解釋爲真/假,如果它到底是什麼,我比較它。所以$variable = true;會工作,但$variable = 1;不會。沒有嚴格的比較,兩個版本都可以工作。當您使用0需要解釋爲truenull應該是false時,此問題會發揮很大作用。