我有一个字符串的问题:
$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
不可以(值相等,但类型不同)。
此示例表明了严格比较的含义,即不仅值很重要,而且比较数据的类型也很重要。