使用这几招,让你从此跟if else 拜拜

|下午群里在讨论关于if-else的优化,在这整理下我常用的几招;

  1. 简单逻辑可以采用三目运算符

    1
    2
    $role = isset($info['role']) ? $info['role'] : 'INVESTOR';</br>
    简写:$role = isset($info['role']) ?: 'INVESTOR';
  2. 提前给定初始值,避免使用else

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (1 == $status) {
    $role = 'INVESTOR';
    } else {
    $role = 'BORRWER';
    }
    优化后:
    $role = 'INVESTOR';
    if (1 == $status) {
    $role = 'BORRWER';
    }
    return $role;
  3. 使用”&&”替换if

    1
    2
    3
    4
    5
    if(strlen($pwd) < 6) {
    $msg = '密码长度不够';
    }
    优化后:
    strlen($pwd) < 6 && $msg = '密码长度不够';
  4. 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. 表驱动法(空间换时间)

    意义在于:逻辑和数据分离;
    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
    27
    if ($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;
    }
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!