2013-08-22 51 views
4

我有這個問題,有一個字符串:評估stripos(),!== FALSE和=== TRUE有什麼區別?

$val = 'NOT NULL'; 

if(stripos($val, 'NULL') !== FALSE){ 
    echo "IS $val"; 
} 

它計算罰款,但如果我使用=== TRUE作爲評價者,不如意的事情。 答案迴避了我,請幫助我理解。

+2

''===嚴格比較即匹配類型爲好。由於'stripos'返回整數和整數!==布爾型'stripos(...)=== true'評估爲'false'。 – Leri

+0

謝謝!事實上,現在很明顯......但由於某種原因,我陷入了一個錯誤的邏輯。在PHP整數 – derei

+0

也被視爲布爾值,並在'strpos'和'stipos'的情況下返回整數(也是字符串偏移量從0開始)。和'==='是嚴格的比較,即'0'不等於'假','1或更多'不等於'真'。 – Shushant

回答

1

答案是因爲您正在使用嚴格的相等運算符。該函數本身返回一個int(或者如果找不到針頭則返回布爾值)。返回值不等於(嚴格意義上,值爲類型)爲true,這就是檢查失敗的原因。

1

由於===!==strict comparison operators - !== false是不一樣的===true,因爲例如,1!==false是確定(值和類型不相等),但1===true是不可接受(值是相等的,但類型不是) 。

該樣本表明嚴格比較的含義 - 即不僅值重要,而且還包括比較數據的類型。

7

如果您閱讀stripos()的文檔,您會發現。

返回相對於haystack字符串的初始位置(獨立於偏移量)的位置。還請注意,字符串位置從0開始,而不是1.

如果未找到針,則返回FALSE

它不返回TRUE。由於您使用的是strict equality,因此您的條件永遠不會是true

如果你沒有stripos($val, 'NULL') == TRUE那麼如果NULL分別在0位置找到您的代碼將執行 - 因爲PHP會做一些類型戲法和有效0 == (int)true

適當的方法來測試使用stripos()存在是你擁有的一切:

if (stripos($val, 'NULL') !== FALSE){ 
    echo "IS $val"; 
} 
相關問題