我有一个字符串的问题: $val = 'NOT NULL'; if(stripos($val, 'NULL') !== FALSE){ echo "IS $val"; } 它的评估结果良好,但如果我使用=== TRUE作为评估器,事情就会出错。 答案使我困惑不解,请帮助我理解。
如果您阅读 stripos() 的文档,您会发现: 返回针对于开始位置的干草堆字符串内存在的针的位置(与偏移量无关)。还请注意,字符串位置从0开始,而不是1。 如果未找到针,则返回FALSE。 它不会返回TRUE。由于您使用了严格相等,您的条件将永远不会为true。如果您这样写stripos($val, 'NULL') == TRUE,那么只要PHP执行类型转换并有效地使0==(int)true,您的代码就会在位置0处找到NULL时执行。使用stripos()测试存在的适当方式如下:if (stripos($val, 'NULL') !== FALSE){ echo "IS $val"; }
由于 === 和!==是严格比较运算符 - !== false 与 === true 不同,因为例如 1!== false 是可以的(值和类型不相等),但是 1 === true 不可以(值相等,但类型不相等)。 这个示例说明了严格比较的含义 - 即不仅关注值,还要关注所比较数据的类型。
===
是严格比较,即匹配类型。由于stripos
返回整数而不是布尔值,因此stripos(...) === true
的结果为false
。 - Leristrpos
和stipos
的情况下,它返回整数(同时字符串偏移从 0 开始)。而===
是严格比较,即0
不等于false
,1 或更多
不等于true
。 - Shushant==
只要偏移量大于0,我会得到TRUE
,但如果偏移量= 0,我会得到一个误导性的FALSE
。现在清楚了,只有与严格的FALSE
进行比较,我才能得到真正的结果。 - derei