首页 > Web开发 > 详细

PHP写代码注意别踩坑

时间:2020-11-26 23:31:53      阅读:34      评论:0      收藏:0      [点我收藏+]

由于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写代码注意别踩坑

原文:https://www.cnblogs.com/phploger/p/14044873.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!