我的问题是字符串:
$val = 'NOT NULL';
if(stripos($val, 'NULL') !== FALSE){
echo "IS $val";
}
它的评估很好,但如果我使用=== TRUE
作为评估者,则会出错。
答案躲过了我,请帮助我理解。
答案 0 :(得分:7)
如果你阅读stripos()
的文档,你会发现。
返回针相对于haystack字符串的beginnning存在的位置(与offset无关)。另请注意,字符串位置从0开始,而不是1。
如果找不到针,则返回
FALSE
。
它不会返回TRUE
。由于您使用的是strict equality,因此您的情况永远不会 true 。
如果您执行了stripos($val, 'NULL') == TRUE
,那么如果在位置NULL
找到0
,您的代码就会执行 - 因为PHP会执行一些 type-juggling 并且有效{ {1}}。
使用0 == (int)true
测试存在的适当方法就是:
stripos()
答案 1 :(得分:1)
答案是因为您正在使用严格相等运算符。函数本身返回一个int(如果没有找到针,则返回布尔值)。返回值不等于(严格意义上,值和类型)为true,这就是检查失败的原因。
答案 2 :(得分:1)
由于===
和!==
为strict comparison operators - !== false
与===true
不同,因为例如1!==false
即可(值和类型不相等),但1===true
不正确(值相等,但类型不相同)。
该样本表明严格比较的含义 - 即不仅值重要,而且还有比较数据的类型。