php踩过的坑(四)strpos引发的谋杀案

一、前方有坑php某些自带函数,如果使用不当,也会坑得你人仰马翻。比如:strpos()先了解一下strpos()函数是干啥的。strpos — 查找字符串首次

大家好,今天来为大家分享php踩过的坑(四)strpos引发的谋杀案的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

strpos — 查找字符串的第一次出现

用法: int strpos ( string $haystack , mix $needle [, int $offset=0 ] )

看下面的代码:

$a=’abcd’;

$b=’b’;

$c=’a’;

回显strpos($a,$b) ? ‘原来他们是兄弟br/’ : ‘不是我的种族,cut tabr/’;

回显strpos($a,$c) ? ‘原来他们是兄弟br/’ : ‘不是我的种族,cut tabr/’;

echo strpos($a,$c)!=false ? ‘原来我们是兄弟’ : ‘如果你不是我的种族,就杀了他’;

php踩过的坑(四)strpos引发的谋杀案

结果显示

原来他们是兄弟

如果你不是我的种族,我会杀了你。

如果你不是我的种族,我会杀了你。

$c的命名是$a的一部分,但结果却被当成了外星人,连续被砍了两次。他被冤枉,引发了一场本是同根生生的杀人悲剧,何必急于求成!

二、防坑攻略

stripos()返回一个字符串在另一个字符串中出现的位置,而这个位置是从0开始计算的。 $c在$a中出现的位置是0,所以被砍掉了。

因此,正确的判断应该是:

$a=’abcd’;

php踩过的坑(四)strpos引发的谋杀案

$c=’a’;

echo strpos($a,$c)!==false ? ‘原来我们是兄弟’ : ‘如果你不是我的种族,就杀了他’;

三、为啥有坑

防坑攻略中提到了一些原因。让我们从充分理解strpos() 函数开始。

用法: int strpos ( string $haystack , mix $needle [, int $offset=0 ] )

范围:

haystack 在此字符串中搜索。

针如果针不是字符串,则将其转换为整数并视为字符的顺序值。

offset 可选的offset 参数可用于指定从haystack 中的哪个字符开始搜索。返回的数字位置是相对于干草堆的起始位置的。

php踩过的坑(四)strpos引发的谋杀案

返回值

以整数形式返回位置信息。如果未找到needle,strpos() 返回布尔值FALSE。

也就是说,该函数可能返回布尔值FALSE,但也可能返回相当于FALSE的非布尔值,例如0或”(空字符串)。因此,判断时需要使用等于‘===’的常量或者不等于‘===’的常量来判断,千万不要省略‘=’号。

四、防坑扩展:

1.有类似功能

strrpos() – 计算指定字符串在目标字符串中最后一次出现的位置

stripos() – 查找字符串的第一次出现(不区分大小写)

strripos() – 计算目标字符串中指定字符串最后一次出现的位置(不区分大小写)

2、还有一个判断一个字符串是否在另一个字符串中的函数:strstr()。与strpos() 的一个区别是该函数的返回值为false 或字符串的一部分。如果单纯判断两个字符串之间的包含关系,最好使用strpos,因为速度更快,消耗内存也更少。

用户评论

php踩过的坑(四)strpos引发的谋杀案
疲倦了

哈哈哈,这篇文章写的太有梗了!我也是在开发项目的时候亲身经历过strpos造成的麻烦,特别是判断字符串是否存在时,简直把头发都要气秃顶!真是要提前做好预防措施,不然真的会步入作者的深渊啊。

    有6位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
怀念·最初

我之前一直觉得strpos这么基础的一个函数应该很简单,没想到还会坑人!还好没踩到特别严重的坑,但这个提醒的确有醒目的作用。以后开发中确实要认真阅读文档,多注意细节。

    有20位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
不离我

这篇文章真是太直观了!给我直接看了一遍我写过的代码就觉得心惊肉跳,幸好之前没有遇到大问题。不过看完之后我会更加重视strpos的使用方法和潜在的 pitfalls!

    有15位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
孤败

没想到这样一个简单的函数居然会引发的血案。看来我还是需要加强php基础知识学习,避免踩坑,让开发之路更平顺。

    有14位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
棃海

之前用strpos的时候确实遇到过几个小问题,但还好解决得及时,没有像作者那样遭遇重大灾难。感谢作者分享经验,让我更加警惕使用这个函数

    有9位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
心脏偷懒

我理解作者的感受!写代码的时候总会被一些小的细节困扰好久,特别是对函数的使用方式不了解的時候,更容易陷入困境。幸好有这样的文章提醒我们,认真学习和积累经验的重要性。

    有14位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
安之若素

PHP是这么神奇的语言,它会让你在欢乐中哭泣,又会让你在痛苦中求知!这篇文章让我重新认识了strpos这个函数,我会更加谨慎地使用它!

    有16位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
封锁感觉

我觉得文章的描述很到位,尤其是关于strpos返回值的解读。很多时候我们只看表面,忽略细节就会造成灾难性的后果,所以要注重理解每个函数的功能和返回类型!

    有11位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
寒山远黛

这个坑我已经踩过好多次了…感觉还是得加强学习,才能避免重蹈覆辙!希望这篇帖子能帮到你大家!

    有13位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
荒野情趣

虽然现在很少用到strpos 函数了,但这篇文章的经验总结还是很宝贵的。php开发中要时刻谨记细节和规范,才能写出更健壮的代码

    有20位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
陌颜幽梦

我个人觉得在很多情况下可以使用其他的更安全的函数替代strpos,比如substr_count或者stripos,这样可以避免很多潜在的错误!希望开发者们也能关注这种方法

    有8位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
病房

作者踩过的坑真的太让人痛并快乐。我们也都要时刻警醒,不能忽视细节,细心阅读文档及研究案例,才不会像作者一样上演血案

    有12位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
月下独酌

哈哈,好熟悉的感觉!有时候为了完成功能,总想着用最简单的方法解决问题,没想到反而给自己挖了坑!不过幸好有这篇文章提醒我,下次要用strpos的时候要更加谨慎了!

    有5位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
蹂躏少女

我觉得这个帖子写的很有用,尤其是对于刚接触php的开发者来说,要提前了解这些陷阱,才能更轻松的学习和开发。希望作者继续分享更多宝贵经验!

    有14位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
oО清风挽发oО

虽然我已经在开发中很少使用strpos函数了,但看到这些坑依然让我感到心惊肉跳的!的确,任何一个函数都需要仔细理解和运用,否则很容易踩雷!

    有6位网友表示赞同!

php踩过的坑(四)strpos引发的谋杀案
墨城烟柳

看来strpos这个函数的使用确实需要注意很多细节,否则很容易栽个跟头!我要好好回顾一下它用法,才能写出更加可靠的代码。

    有12位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/126326.html

(0)
小su's avatar小su
上一篇 2024年9月1日 下午9:30
下一篇 2024年9月1日 下午9:31

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注