鍍金池/ 問(wèn)答/PHP/ 簡(jiǎn)化一個(gè)函數(shù) php

簡(jiǎn)化一個(gè)函數(shù) 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;
        }
    }
}

寫了一個(gè)權(quán)限的函數(shù),能不能簡(jiǎn)化一下,請(qǐng)指點(diǎn)。

回答
編輯回答
祈歡

最近迷上了不用分支語(yǔ)句寫代碼,小小試一下。

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];
}

平時(shí)代碼里面習(xí)慣了用完全相等來(lái)判斷,這樣可以省空值的類型變化引起的問(wèn)題。增加了函數(shù)參數(shù)類型和返回值類型的聲明。

2018年4月7日 07:17
編輯回答
夕顏
        $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;
        }
2018年2月5日 10:47
編輯回答
不將就
    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;
        }
    }
2017年11月1日 15:05
編輯回答
奧特蛋
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這種,閱讀代碼的人根本不清楚是什么意思。

2018年7月1日 06:35