为什么使用 !== FALSE 来检查 php 中的 stripos?

2022-08-30 21:26:59

这是我正在查看的代码。

foreach ($header as $idx => $field) {
    if (stripos($field, 'foo') !== false) {
        $cols['foo'] = $idx;
    } else if (stripos($field, 'bar') !== false) {
        $cols['bar'] = $idx;
    } else if (stripos($field, 'brr') !== false) {
        $cols['brr'] = $idx;
    } else if (stripos($field, 'ffo') !== false) {
        $cols['ffo'] = $idx;
    }
}

抱歉,也不知道如何漂亮地格式化代码,任何提示都将不胜感激。

我正在看一些比我聪明得多的人写的代码,所以我不倾向于相信我的第一印象只是把一切都改成,但为什么要这样做呢?if(stripos($foo))


答案 1

答案是,在PHP中,“false”值可以由少量值满足,例如空数组,空字符串,NULL,整数0等。有关完整列表,请参阅 empty() 函数页面:

http://php.net/empty

因此,这总是会产生不正确的结果:

if(strpos("abc", "a")) { 
  echo "Yes";
} else {
  echo "No";
}

由于“a”出现在第一个位置(索引0),那么PHP认为“if(0)”是假的。

当 strpos 在你的大海捞针中没有找到针时,它将返回布尔 FALSE,这是你想要用三重相等运算符检查的内容,该运算符同时检查类型和值。请参阅有关比较运算符的文档

http://www.php.net/manual/en/language.operators.comparison.php


答案 2

stripos 返回一个字符串在另一个字符串中的位置,如果找不到该字符串,则返回 false,因此建议使用标识比较运算符 (===, !==),因为 PHP 将 0 视为“falsy”值,请考虑以下示例:

// Find the position of the 'a' character in the 'abc' string:
stripos('abc', 'a') !== false; // true, position is 0
stripos('abc', 'a') != false; // false, 0 is "falsy"

推荐