首页 >后端开发 >php教程 >为什么比较 `strpos()` 和 `true` 无法检测 PHP 中的字符串出现?

为什么比较 `strpos()` 和 `true` 无法检测 PHP 中的字符串出现?

Susan Sarandon
Susan Sarandon原创
2024-12-10 08:29:10339浏览

Why Does Comparing `strpos()` to `true` Fail to Detect String Occurrences in PHP?

严格比较 strpos() 与 true 的错误解释

在尝试确定字符串是否包含不需要的元素时,程序员在使用 strpos() 直接进行操作时可能会遇到意外结果相等比较。

考虑这个场景:

$link = 'https://google.com';
$unacceptables = ['https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png'];

foreach ($unacceptables as $unacceptable) {
    if (strpos($link, $unacceptable) === true) {
        echo 'Unacceptable Found<br />';
    } else {
        echo 'Acceptable!<br />';
    }
}

有趣的是,这段代码打印“可接受!”对于 $unacceptables 中的每个元素,尽管 $link 中存在 https。这种看似矛盾的行为源于 strpos() 本身的性质。

深入研究 PHP 官方文档可以阐明该函数的真正目的:

返回在指针中第一次出现的数字位置haystack 字符串。

因此,当将 strpos() 的结果直接与 true 进行比较时,您可以有效地检查是否存在$link 中不需要的元素,而不是它与 true 相等。

要纠正这个问题,更合适的方法是在 if 语句中使用 !== false:

// ...
if (strpos($link, $unacceptable) !== false) {

通过这样做因此,您可以正确评估 strpos() 是否检测到不良元素的存在,从而产生所需的结果。

以上是为什么比较 `strpos()` 和 `true` 无法检测 PHP 中的字符串出现?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn