PHP写代码注意别踩坑

由于PHP是弱类型语言,程序运行时不会检查变量是否合法,很多时候调用函数只会返回false,null等值,因而有时很难发现有bug的存在。
因此在开发过程中需要特别注意,规避一下不必要的bug出现。

以下是我刚开始工作时在工作中遇到过的问题,特记录下来,让更多的新进入PHP世界的朋友少踩一些坑。
因为在写这篇文章时,时间过去了好久,遇到的很多情况都忘记了,因此这个文章会持续更新,想到了就加上。

array_merge — 合并一个或多个数组

合并一个二维数组:

array_merge(...$arr);

如果二维数组$arr 不是数字索引,那返回false
正确的做法是,把字符串索引变成数字索引再做合并操作:

array_merge(...array_values($arr));

合并多个一维数组:

array_merge($arr1, $arr2);

如果$arr1或$arr2有一个不是数组,则返回false。当然我们可能不会到故意传非数组变量,那如果是$arr1和$arr2是其他函数return回来的呢,由于php是弱类型语言,因此无法保证别的从函数return回来的变量会一直是数组。
因此我们需要做类型强制转换:

array_merge((array)$arr1, (array)$arr2);

array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值

array_combine($arrKeys, $arrValues)

如果数组$arrKeys和$arrValues长度不一致,则会将会抛出一个警告错误(E_WARNING)并返回一个false。
因此我们需要保证二者长度一致:

$minLen = min(count($arrKeys), count($arrValues));
array_combine(array_slice($arrKeys, 0, $minLen), array_slice($arrValues, 0, $minLen));

字符串和0比较错误

var_dump(‘string‘ == 0);

结果:bool(true)

PHP会把‘string‘转成整形与0比较大小,‘string‘转成整形自然就是0了,因此会得出true
因此,如果是字符串比较,应该给0变成字符串:

var_dump(‘string‘ == ‘0‘);

未完待续...

PHP写代码注意别踩坑

上一篇:c++虫洞 STL string


下一篇:Web3D 能够用哪些工具开发