首页
php奇葩的坑

php认为0等于字符串?

0 == 'er32wr' //true
0 ==  '123'   //false
0 == '123aa'  //false
1.2 == '1.2abc' //true

原因:

php字符串跟数字比较的时候,会把字符串强制转换为数值来处理。

所以对于纯字符串abc强转(int)'abc',它会去字符串开头找数值,没有找到,所以值为0
对于123aa这种,强转后得到的是123

https://www.php.net/manual/zh/language.types.string.php#language.types.string.conversion

in_array 如果字符串跟数字比较,会强制转换成数字

in_array('102aaa',[102,103,104]) //true

如果想强制比较类型的话,须带上第三个参数

in_array('102aaa',[102,103,104],true) //false

https://www.php.net/manual/zh/function.in-array.php

empty的坑

empty最大的误区就是没有把0考虑进去,还有一种情况也值得深思

$test = (object)NULL;
print_r($test);
print_r(empty($test));
//结果
//stdClass Object ( )
//0

https://www.php.net/manual/zh/function.empty.php