首页 > 后端开发 > php教程 > 为什么 PHP 中与 strpos() 的松散比较会导致意外结果?

为什么 PHP 中与 strpos() 的松散比较会导致意外结果?

Barbara Streisand
发布: 2024-12-26 10:38:09
原创
949 人浏览过

Why Does Loose Comparison with strpos() in PHP Lead to Unexpected Results?

对 strpos() 返回值的松散解释会导致意外结果

在寻找字符串中的特定子字符串时,存在一个使用 PHP 的 strpos() 函数时可能会导致意外结果的陷阱。让我们揭开为什么松散检查 strpos() 返回值会导致混乱的谜团。

考虑下面的代码片段:

if (
    strpos($grafik['data'], $ss1) != false
    && strpos($grafik['data'], $ss2) != false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)
登录后复制

在此代码中,strpos() 用于确定$grafik['data'] 字符串中子字符串 $ss1 和 $ss2 的位置。目的是检查两个子字符串是否存在,并确保 $ss1 排在 $ss2 之前。

根据 PHP 手册,如果未找到子字符串,strpos() 返回 false。然而,我们发现,当子字符串从零位置(即字符串的开头)开始时,strpos() 返回 0。这会导致意外的解释,其中表达式:

strpos($grafik['data'], $ss1) != false
登录后复制

计算结果为false,尽管 $ss1 从零位置出现。罪魁祸首是弱等价运算符 !=,它认为 0 等同于 false。

要纠正此问题,应使用严格等价运算符 ===:

if (
    strpos($grafik['data'], $ss1) !== false
    && strpos($grafik['data'], $ss2) !== false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)
登录后复制

=== 运算符执行严格比较,确保 0 不被视为等同于 false。通过此更正,代码将正确确定 $ss1 和 $ss2 的存在及其相对位置。

以上是为什么 PHP 中与 strpos() 的松散比较会导致意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

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