对某一变量连续判断值的优化代码-通过复合数据类型以及三目运算

发布于 2023-05-26  918 次阅读


内容纲要

对于需要某一个变量值进行多个判断,例如判断用户的权限组来决定是否允许访问页面:

假设用户实例为user,权限组的id为powerId,对权限组为1,2,5,8的用户允许访问此页面。

Python:

user=User()
if user.powerId==1 or user.powerId==2 or user.powerId==5 or user.powerId==8:
    user.fetch()
else:
    print("Error:您无权访问")

在Python中可以通过in运算符来将这一组合的运算符结合起来:

if int(user.powerId) in (1,2,5,8):
    user.fetch()
else:
    print('Error:您无权访问')

PHP:

$user=new User();
$pid=$user->powerId;
if($pid==1 || $pid==2 || $pid==5 || $pid==8){
    $user->fetch();
}else{
    die('您无权限');
}

PHP没有类似python的运算符,但是在Python中in实际上就是判断变量是否在一个元组中,而PHP只有数组的概念,基于此原理,可以通过判断变量是否在数组中来实现:

$user=new User();
$pid=$user->powerId;
$arr=[1,2,5,8];
if(in_array($pid,$arr)){
    $user->fetch();
}else{
    die('您无权限');
}

进一步优化:考虑到不使用else语句,仅使用if进行判断,即不在非权限组用户访问则返回错误:

Python:

user=User()
if user.powerId not in [1,2,5,8]:
    return False
//code here...

PHP:

$user=new User();
$pid=$user->powerId;
if(!in_array($pid,[1,2,5,8])){
    die('您无权限!')
}

实例:对上下级用户关系进行流程控制,如果用户绑定了上级用户且上级ID不为1,则为类属性f_user赋值,同时需要根据上级用户指定的一段字符串给用户展示数据,如果上级用户没有定义,则使用系统设定的字符串。在实现流程的基础上,通过三目运算进一步简化代码。

  • $this->user Array 存放用户数据的属性,如果用户未登录则为空
    • link_id int 上级用户的ID
  • $this->f_user Array 存放上级用户数据的属性
    • sms_suffix String 自定义的字符串
  • $this->sms_suffix String 上级用户自定义的字符串
  • $this->config Array 系统配置属性
    • stay Array 用户相关配置信息
      • sms_suffix String 默认的自定义字符串
  • ...
//读取上级用户信息:
if($this->user<>NULL and !in_array($this->user['link_id'],[1,NULL])){
            $rs=Db::table('member')->where('id',$this->user['link_id'])->select()[0];
            $this->f_user=$rs;
        }
//读取自定义字符串:
$str=$this->f_user<>NULL ? ($this->f_user['sms_suffix']<>NULL ? $this->f_user['sms_suffix'] : $this->config['stay']['sms_suffix']) : ($this->user['sms_suffix']<>NULL ? $this->user['sms_suffix']: $this->config['stay']['sms_suffix']);

通过三目运算符可以很好的代替if...else语句来减少代码量和降低源代码体积。

届ける言葉を今は育ててる
最后更新于 2023-05-26