|下午群里在讨论关于if-else的优化,在这整理下我常用的几招;
简单逻辑可以采用三目运算符
1
2$role = isset($info['role']) ? $info['role'] : 'INVESTOR';</br>
简写:$role = isset($info['role']) ?: 'INVESTOR';提前给定初始值,避免使用else
1
2
3
4
5
6
7
8
9
10
11if (1 == $status) {
$role = 'INVESTOR';
} else {
$role = 'BORRWER';
}
优化后:
$role = 'INVESTOR';
if (1 == $status) {
$role = 'BORRWER';
}
return $role;使用”&&”替换if
1
2
3
4
5if(strlen($pwd) < 6) {
$msg = '密码长度不够';
}
优化后:
strlen($pwd) < 6 && $msg = '密码长度不够';switch代替if else
注意细节:
4.1 根据条件,来判断等级出现频率的高低,区分明显的放上面判断,区分不明显的放下面;
4.2 根据出现的次数来综合判断(业务层);1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20//更新用户状态
$status = $data['status'];
switch($status) {
case 'PASSED':
$status = 1; //待激活(使用频率高)
break;
case 'AUDIT':
$status = 2;
break;
case 'BACK':
$status = 3;
break;
case 'REFUSED':
$status = 4;
break;
default:
$status = 0; //使用频率低
}
$sql = sprintf("UPDATE %s SET status = %d WHERE cg_uid = %d", 'XXXX', $status, $XXXX);
return $this->mdb->query($sql) ? true : false;表驱动法(空间换时间)
意义在于:逻辑和数据分离;
5.1 数据的添加是非常简单,低成本和低风险的;
5.2 而逻辑的添加是复杂,高成本和高风险的;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27if ($role != "INVESTOR" ) {
$this->_error('角色错误');
return false;
} else if ($role != "BORROWERS") {
$this->_error('角色错误');
return false;
} else if ($role != "INTERMEDIATOR") {
$this->_error('角色错误');
return false;
}
优化后:
class CgtRole
{
static $VALID_ROLES = array(
self::INTERMEDIATOR,
self::INVESTOR,
self::BORROWERS,
);
static function valid($role)
{
return in_array($role, self::$VALID_ROLES);
}
}
if (!CgtRole::valid($info['role'])) {
$this->_error('角色错误');
return false;
}