php |更有效的功能

时间:2014-01-17 11:21:46

标签: php arrays function

我有一个功能,它的工作原理。请查看以下内容:

public static function checkAccessLevel($user, $level) {

    public static function checkLevel($user, $level) {

    if ($level == "1") {
       if (!$user->usertype == 1) {
          return array(
           'error'  => 'Please login before', 'errortype' => 0
          );    
       }
    } else if ($level == "2") {
       if (!$user->usertype == 2) {
          return array(
            'error' => 'Please login before', 'errortype' => 0
          );    
       }                    
    } else if ($level == "1,2") {
       if (!$user->usertype == 1 || !$user->usertype == 2) {
           return array(
              'error'   => 'Please login before', 'errortype' => 0
           );   
       }                
    } else {
       return array(
          'error'   => 'Please login before', 'errortype' => 0
       );
    }
}

我正在寻找代码优化的方法。是否可以重写此功能?

4 个答案:

答案 0 :(得分:1)

首先考虑使用switch,它应该更具可读性。

然后你可以将你的条件分组,而不是:

 } else if ($level == "1,2") {
   if (!$user->usertype == 1 || !$user->usertype == 2) {

将他们分组:

(($level == "1,2") && (!$user->usertype == 1 || !$user->usertype == 2))

然后你可以使用临时变量$ result:

$result = array('Please login...

并在结尾处返回,而不是在每个步骤中使用return关键字,它应该可以帮助您进行调试。

另外我建议阅读Martin Fowlers book about refactoring,这会给你很多好建议。

答案 1 :(得分:1)

public static function checkLevel($user, $level)
{
    if (($level == "1" && ! $user->usertype == 1) ||
        ($level == "2" && ! $user->usertype == 2) ||
        ($level == "1,2" && ! in_array($user->usertype, array(1, 2))) ||
        ! in_array($level, array("1", "2", "1,2"))) {
        return array(
            'error' => 'Please login before', 'errortype' => 0
        );
    }
}

答案 2 :(得分:1)

$level始终以逗号分隔,只需将其分解并检查:

public static function checkLevel($user, $level)
{
    $level = explode(',', $level);
    if(!in_array($user->usertype, $level))
        return array(
            'error' => 'Please login before',
            'errortype' => 0
        );
}

更好的是,抛出一个Exception或返回一个布尔值。

答案 3 :(得分:0)

您可以使用switch语句而不是if语句,如下所示:

public static function checkLevel($user, $level) {
    $result = array();
    switch($level) {
        case '1':
            if( $user->usertype == 1) {
                $result = array(
                    'error'  => 'Please login before', 'errortype' => 0
                );
            }
        break;
        // More cases for each level.
        default:
            $result = array(
                'error'  => 'Please login before', 'errortype' => 0
            );
    }

    return $result;
}