我有一个字符串的问题:
$val = 'NOT NULL';
if(stripos($val, 'NULL') !== FALSE){
echo "IS $val";
}
它评估得很好,但如果我=== TRUE
用作评估者,事情就会出错。答案让我难以理解,请帮助我理解。
如果您阅读文档,stripos()
您会发现。
返回针相对于 haystack 字符串开头的位置(与偏移量无关)。另请注意,字符串位置从 0 开始,而不是 1。
FALSE
如果未找到针头,则返回。
它不返回TRUE
。由于您使用的是严格相等,因此您的条件永远不会为真。
如果你这样做了,那么如果在位置找到stripos($val, 'NULL') == TRUE
你的代码就会执行——因为 PHP 会做一些类型杂耍和有效的。NULL
0
0 == (int)true
使用以下方法测试存在的适当方法stripos()
是:
if (stripos($val, 'NULL') !== FALSE){
echo "IS $val";
}
答案是因为您使用的是严格相等运算符。该函数本身返回一个 int(如果找不到针,则返回布尔值)。返回值不等于(严格意义上的值和类型)为真,这就是检查失败的原因。
因为===
和!==
是严格的比较运算符-!== false
与===true
因为不同,例如,1!==false
is ok(值和类型不相等),but 1===true
is not ok(值相等,但类型不相等)。
这个样本表明了严格比较的含义——即不仅值很重要,而且比较数据的类型也很重要。