我有一个字符串的问题:
$val = 'NOT NULL';
if(stripos($val, 'NULL') !== FALSE){
echo "IS $val";
}它的计算结果很好,但是如果我使用=== TRUE作为计算器,事情就会出错。答案让我摸不着头脑,请帮我理解。
发布于 2013-08-22 21:58:11
如果您阅读了stripos()的文档,您会发现。
返回指针所在位置相对于干草堆字符串的起始位置(与偏移量无关)。还要注意,字符串位置从0开始,而不是从1开始。
如果未找到指针,则返回FALSE。
它不返回TRUE。由于您使用的是strict equality,因此您的条件永远不会为真。
如果你做了stripos($val, 'NULL') == TRUE,那么你的代码将会在0位置找到NULL的情况下执行--因为PHP会做一些类型调整并且有效地0 == (int)true。
使用stripos()测试是否存在的适当方法是:
if (stripos($val, 'NULL') !== FALSE){
echo "IS $val";
} 发布于 2013-08-22 21:57:39
答案是因为您使用的是严格相等运算符。函数本身返回一个int (如果没有找到指针,则返回boolean )。返回值(严格意义上,值和类型)不等于true,这就是检查失败的原因。
发布于 2013-08-22 21:58:04
由于===和!==是strict comparison operators - !== false与===true不同,例如,1!==false是ok (值和类型不相等),但1===true不是ok (值相等,但类型不相等)。
这个样本表明了严格比较的含义-即不仅价值重要,而且比较数据的类型也很重要。
https://stackoverflow.com/questions/18382466
复制相似问题