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