evaluate 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()的文档,您会发现。

返回指针相对于草垛字符串起点的位置(与偏移无关)。还要注意,字符串位置从0开始,而不是从1开始。

如果未找到针头,则返回FALSE

它不返回TRUE。由于您使用严格相等,因此您的条件永远不会为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不可以(值相等,但类型不同)。

此示例表明了严格比较的含义,即不仅值很重要,而且比较数据的类型也很重要。