我有这个问题,有一个字符串:评估stripos(),!== FALSE和=== TRUE有什么区别?
$val = 'NOT NULL';
if(stripos($val, 'NULL') !== FALSE){
echo "IS $val";
}
它计算罚款,但如果我使用=== TRUE
作为评价者,不如意的事情。 答案回避了我,请帮助我理解。
我有这个问题,有一个字符串:评估stripos(),!== FALSE和=== TRUE有什么区别?
$val = 'NOT NULL';
if(stripos($val, 'NULL') !== FALSE){
echo "IS $val";
}
它计算罚款,但如果我使用=== TRUE
作为评价者,不如意的事情。 答案回避了我,请帮助我理解。
答案是因为您正在使用严格的相等运算符。该函数本身返回一个int(或者如果找不到针头则返回布尔值)。返回值不等于(严格意义上,值为和类型)为true,这就是检查失败的原因。
由于===
和!==
是strict comparison operators - !== false
是不一样的===true
,因为例如,1!==false
是确定(值和类型不相等),但1===true
是不可接受(值是相等的,但类型不是) 。
该样本表明严格比较的含义 - 即不仅值重要,而且还包括比较数据的类型。
如果您阅读stripos()
的文档,您会发现。
返回相对于haystack字符串的初始位置(独立于偏移量)的位置。还请注意,字符串位置从0开始,而不是1.
如果未找到针,则返回
FALSE
。
它不返回TRUE
。由于您使用的是strict equality,因此您的条件永远不会是true。
如果你没有stripos($val, 'NULL') == TRUE
那么如果NULL
分别在0
位置找到您的代码将执行 - 因为PHP会做一些类型戏法和有效0 == (int)true
。
适当的方法来测试使用stripos()
存在是你拥有的一切:
if (stripos($val, 'NULL') !== FALSE){
echo "IS $val";
}
''===严格比较即匹配类型为好。由于'stripos'返回整数和整数!==布尔型'stripos(...)=== true'评估为'false'。 – Leri
谢谢!事实上,现在很明显......但由于某种原因,我陷入了一个错误的逻辑。在PHP整数 – derei
也被视为布尔值,并在'strpos'和'stipos'的情况下返回整数(也是字符串偏移量从0开始)。和'==='是严格的比较,即'0'不等于'假','1或更多'不等于'真'。 – Shushant