我有這個問題,有一個字符串:評估stripos(),!== FALSE和=== TRUE有什麼區別?
$val = 'NOT NULL';
if(stripos($val, 'NULL') !== FALSE){
echo "IS $val";
}
它計算罰款,但如果我使用=== TRUE
作爲評價者,不如意的事情。 答案迴避了我,請幫助我理解。
我有這個問題,有一個字符串:評估stripos(),!== FALSE和=== TRUE有什麼區別?
$val = 'NOT NULL';
if(stripos($val, 'NULL') !== FALSE){
echo "IS $val";
}
它計算罰款,但如果我使用=== TRUE
作爲評價者,不如意的事情。 答案迴避了我,請幫助我理解。
答案是因爲您正在使用嚴格的相等運算符。該函數本身返回一個int(或者如果找不到針頭則返回布爾值)。返回值不等於(嚴格意義上,值爲和類型)爲true,這就是檢查失敗的原因。
由於===
和!==
是strict comparison operators - !== false
是不一樣的===true
,因爲例如,1!==false
是確定(值和類型不相等),但1===true
是不可接受(值是相等的,但類型不是) 。
該樣本表明嚴格比較的含義 - 即不僅值重要,而且還包括比較數據的類型。
如果您閱讀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";
}
''===嚴格比較即匹配類型爲好。由於'stripos'返回整數和整數!==布爾型'stripos(...)=== true'評估爲'false'。 – Leri
謝謝!事實上,現在很明顯......但由於某種原因,我陷入了一個錯誤的邏輯。在PHP整數 – derei
也被視爲布爾值,並在'strpos'和'stipos'的情況下返回整數(也是字符串偏移量從0開始)。和'==='是嚴格的比較,即'0'不等於'假','1或更多'不等於'真'。 – Shushant