1. if语句多重嵌套
例如:
if($cond_1){
if($cond_2 == 1){
if($cond_3 - 1024 > 0){
// Xxxx
}
}
}
应该对if判断进行组合, 并将容易判断的条件写在前面
if($cond_1 && $cond_2 == 1 && $cond_3 - 1024 > 0){
// Xxxx
}
2. 将代码封装到if里
例如:
foreach ($list as $user) {
if (!$user->disabled()) {
// 其他代码
//
}
}
应该将所有需要进行的判断前置, 提前结束/退出
foreach ($list as $user) {
if ($user->disabled()) {
break;
}
// 其他代码
//
}
3. 循环中执行查询
这样查询多次,效率低下
foreach (){
doSQL
}
选择sql查出之后再处理数据
doSQL
foreach (){
}
4. 多次调用isset()
例如:
if (!isset($a)||!isset($b)||!isset($c)){
return;
}
isset()允许接收多个变量
if (!isset($a,$b,$c)){
return;
}
对isset()的误解
isset()不仅在变量不存在时返回false, 还会在变量值为null时返回false;
5. 循环遍历前判断空
例如:
if (count($list) > 0) {
foreach ($list as $v) {
// todo
}
}
foreach ()、 for() 以及数组函数(array_ *)可以处理空数组
6 引用变量后未删掉, 造成不容易发现的bug
看一组循环
$arr = [1, 2, 3];
foreach ($arr as $v) {}
dump($arr);
foreach ($arr as &$v) { }// 引用遍历
dump($arr);
foreach ($arr as $v) {}
dump($arr);
输出:
foreach循环并不会产生一个块级作用域, $v就成了一个全部变量。遍历过程每次迭代都会形成对下一个元素的引用, $v会引用$arr的最后一个元素, 并保留在作用域。