评估stripos(),有什么区别!== FALSE和=== TRUE?

时间:2013-08-22 13:53:30

标签: php evaluate stripos

我的问题是字符串:

$val = 'NOT NULL';

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

它的评估很好,但如果我使用=== TRUE作为评估者,则会出错。 答案躲过了我,请帮助我理解。

3 个答案:

答案 0 :(得分:7)

如果你阅读stripos()的文档,你会发现。

  

返回针相对于haystack字符串的beginnning存在的位置(与offset无关)。另请注意,字符串位置从0开始,而不是1。

     

如果找不到针,则返回FALSE

它不会返回TRUE。由于您使用的是strict equality,因此您的情况永远不会 true

如果您执行了stripos($val, 'NULL') == TRUE,那么如果在位置NULL找到0,您的代码就会执行 - 因为PHP会执行一些 type-juggling 并且有效{ {1}}。

使用0 == (int)true测试存在的适当方法就是:

stripos()

答案 1 :(得分:1)

答案是因为您正在使用严格相等运算符。函数本身返回一个int(如果没有找到针,则返回布尔值)。返回值不等于(严格意义上,值类型)为true,这就是检查失败的原因。

答案 2 :(得分:1)

由于===!==strict comparison operators - !== false===true不同,因为例如1!==false即可(值和类型不相等),但1===true不正确(值相等,但类型不相同)。

该样本表明严格比较的含义 - 即不仅值重要,而且还有比较数据的类型。