PHP开发中,函数in_array()
算是使用比较多的。
最近发现一个坑,上代码:
return in_array('字符串', [0, 1]);
测试版本:7.4.3
你认为返回啥?
返回的是true
反过来也…
return in_array(0, ['字符串', 1]);//还是true
如果是语言故意设计成这样的,那只能怪我学艺不精了,同时也非常疑惑这种脑洞设计。
经过测试发现array_search()
也是这样
解决办法:
- 在使用
in_array()
或array_search()
之前,先判断数据类型,以避开这个坑。 - 或者设置第三个参数
strict
为true,但是这样就必须类型严格一致。作为一门弱类型语言这样就失去了泛用性。
继续测试(崩溃):
return '字符串' == 0;//返回true
永远记住这个坑吧