簡體   English   中英

評估stripos(),有什么區別!== FALSE和=== TRUE?

[英]evaluate stripos(), what is the difference between !== FALSE and === TRUE?

我有一個字符串的問題:

$val = 'NOT NULL';

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

它評估很好,但如果我使用=== TRUE作為評估者,那么事情就出錯了。 答案躲過了我,請幫助我理解。

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

返回針相對於haystack字符串的beginnning存在的位置(與offset無關)。 另請注意,字符串位置從0開始,而不是1。

如果未找到針,則返回FALSE

它不會返回TRUE 既然你使用了嚴格的平等 ,那么你的情況將永遠不會成

如果你做了stripos($val, 'NULL') == TRUE那么你的代碼會在0位找到NULL執行 - 因為PHP會做一些類型雜耍並且有效地0 == (int)true

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

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

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

由於===!==嚴格的比較運算符 - !== false===true ,因為例如1!==false是正確的(值和類型不相等),但是1===true不正常(值相等,但類型不是)。

此示例表明嚴格比較的含義 - 即不僅重要的是價值,而且還有比較數據的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM