首页 > 后端开发 > php教程 > 为什么 PHP 中的'strpos()”严格相等常常会产生意想不到的结果?

为什么 PHP 中的'strpos()”严格相等常常会产生意想不到的结果?

Susan Sarandon
发布: 2024-12-16 15:18:20
原创
196 人浏览过

Why Does Strict Equality with `strpos()` in PHP Often Produce Unexpected Results?

PHP 中不可靠的布尔比较:了解 strpos() 的怪癖

在 PHP 中,strpos() 函数是一个基本工具在字符串内搜索。然而,程序员遇到的一个常见陷阱是将使用严格相等运算符 (===) 的 strpos() 的结果与 true 进行比较。

问题:

考虑以下代码片段:

$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 />';
    }
}
登录后复制

此代码尝试检查 $link URL 是否包含中列出的任何字符串$不可接受的。然而,它意外地打印出“可接受!”对于所有情况,即使 $link 中存在“https:”。

解决方案:

问题的根源在于 PHP 比较结果的行为strpos() 的。默认情况下,strpos() 返回一个整数,表示子字符串在字符串中第一次出现的位置。如果未找到子字符串,则返回 false。

在代码片段中,将 strpos() 与 true 进行比较时,实际上是在检查结果是否为非零数字。由于该函数在找到匹配项时始终返回一个数字,因此此比较始终返回 true,从而错误地指示子字符串的存在。

要解决此问题,请改用严格不等运算符 (!==),该运算符检查不相等性。这可确保在未找到子字符串时进行与 false 的比较。

// ...
if (strpos($link, $unacceptable) !== false) {
登录后复制

通过执行此简单修改,当 $link URL 包含一个时,代码片段将正确识别并打印“Unacceptable Found”禁止的子字符串。

以上是为什么 PHP 中的'strpos()”严格相等常常会产生意想不到的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板