简化一个函数 php

function has_permission($uid,$type)
{
    if($type==1){
        if($uid==Session::get('user_id') || Session::get('group_id')==1 || Session::get('group_id')==2){
            return true;
        }else{
            return false;
        }
    }
    if($type==2){
        if(Session::get('group_id')==1 || Session::get('group_id')==2){
            return true;
        }else{
            return false;
        }
    }
    if($type==3){
        if(Session::get('group_id')==1){
            return true;
        }else{
            return false;
        }
    }
}

写了一个权限的函数,能不能简化一下,请指点。

阅读 3.5k
4 个回答
        $suid = Session::get('user_id');
        $gid = Session::get('group_id');
        switch ($type) {
            case 1:
                return $uid == $suid || $gid == 1 || $gid == 2;
            case 2:
                return $gid == 1 || $gid == 2;
            case 3:
                return $gid == 1;
            default:
                return false;
        }

最近迷上了不用分支语句写代码,小小试一下。

function hasPermission(int $currentUid, int $type = 0): bool
{
    $uid = (int)Session::get('user_id');
    $gid = (int)Session::get('group_id');
    
    $permissions = [
        false,
        $currentUid === $uid || $gid === 1 || $gid === 2,
        $gid === 1 || $gid === 2,
        $gid === 1
    ];
    
    return isset($permissions[$type]) && $permissions[$type];
}

平时代码里面习惯了用完全相等来判断,这样可以省空值的类型变化引起的问题。增加了函数参数类型和返回值类型的声明。

function hasPermission($uid, $type)
{
    $functionName = 'hasType'.$type.'Permission';
    return call_user_func($functionName, $uid);
}

function hasType1Permission($uid)
{
    $sessionUid = Session::get('user_id');
    $sessionGid = Session::get('group_id');
    return $uid == $sessionUid || $sessionGid == 1 || $sessionGid == 2;
}

function hasType2Permission($uid)
{
    $sessionGid = Session::get('group_id');
    return $sessionGid == 1 || $sessionGid == 2;
}

function hasType3Permission($uid)
{
    $sessionGid = Session::get('group_id');
    return $sessionGid == 1;
}

代码中最好不要使用1、2这种,阅读代码的人根本不清楚是什么意思。

    function has_permission($uid, $type)
    {
        switch ($type) {
            case 1:
                return $uid == Session::get('user_id') || in_array(Session::get('group_id'),[1,2]);
            case 2:
                return in_array(Session::get('group_id'),[1,2]);
            case 3 :
                return Session::get('group_id') == 1;
            default:
                return false;
        }
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题