2013-02-15 17 views
1

我有這個功能與TRUE,則返回錯誤的事情調用函數

//$hasher is a phpass object.  
public function getHash($check) 
    { 
    global $hasher; 
    if ($check == 'hash') 
     { 
     return $hasher->HashPassword($this->password); 
     } 
    else if ($check == 'check') 
     { 
     return $hasher->CheckPassword($this->password, $this->getData('data')['password']); 
     } 
    else 
     { 
     return 'F*** off'; 
     } 
    } 

當我把它這就是我得到

$obj->getHash('hash') 
//getHash(): $2a$08$Uof.EzLkJI.......... 

$obj->getHash('check') 
//getHash(): 1 

$obj->getHash('dsadaldas') //and anything else in the brackets 
//getHash():F*** off 

$obj->getHash(TRUE) 
//getHash(): $2a$08$3vNYnGVsf... 

爲什麼打電話與TRUE回報的方法一樣,如果我用'hash'作爲參數調用它?我在這裏錯過了什麼嗎?我嘗試了switch(),它仍然表現相同。

回答

2

因爲一個字符串,如hash計算爲true當您使用等號(==):

您可以使用相同的(===operator代替:

if ($check === 'hash') 

這確保了無論是變量的值和類型是相同的。

+0

是啊,超級同一運營商,我總是忘了他們:))該做的伎倆。謝謝你的解釋,我希望它能延續下去。乾杯! – vulkoingim 2013-02-15 12:51:17

+0

@vulkoingim沒問題,很高興解決了:) – MrCode 2013-02-15 12:58:16

0

這是因爲當你比較布爾(true)到字符串("hash")時,字符串得到converted to boolean,而不是相反。

解決方法:使用類型安全的比較(===

相關問題