4

我有一个字符串的问题:

$val = 'NOT NULL';

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

它评估得很好,但如果我=== TRUE用作评估者,事情就会出错。答案让我难以理解,请帮助我理解。

4

3 回答 3

8

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

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

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

它不返回TRUE。由于您使用的是严格相等,因此您的条件永远不会为

如果你这样做了,那么如果在位置找到stripos($val, 'NULL') == TRUE你的代码就会执行——因为 PHP 会做一些类型杂耍和有效的。NULL00 == (int)true

使用以下方法测试存在的适当方法stripos()是:

if (stripos($val, 'NULL') !== FALSE){
    echo "IS $val";
} 
于 2013-08-22T13:58:10.623 回答
1

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

于 2013-08-22T13:57:38.967 回答
1

因为===!==严格的比较运算符-!== false===true因为不同,例如,1!==falseis ok(值和类型不相等),but 1===trueis not ok(值相等,但类型不相等)。

这个样本表明了严格比较的含义——即不仅值很重要,而且比较数据的类型也很重要。

于 2013-08-22T13:58:04.263 回答