Laravel 5:奇怪的错误,中间件中的简单OR逻辑?

时间:2015-09-24 09:27:59

标签: php laravel-5

我只是偶然发现中间件中的奇怪错误简单OR逻辑。

public function handle($request, Closure $next)
{
    //can create user, 1 Super Administrator, 2 Administrator
    //dd(Auth::user()->role_id); //print 2

    if((Auth::user()->role_id != "1") || (Auth::user()->role_id != "2")){
        return Auth::user()->role_id . " is not equal with 1 or 2, logic true";
    }else{
        return Auth::user()->role_id . " is equal with 1 or 2, logic false";
    }

    return $next($request);
}

当我访问受保护的路线时,我总是得到2 is not equal with 1 or 2, logic true,在这种情况下,Auth::user()->role_id2

我的代码有什么问题吗?但是,如果我只运行一个语句,逻辑运行得很好,所以当我使用多个语句时,我认为问题就出现了。

实际上我只是想检查登录的用户role_id1还是2,如果是,则执行下一个请求,否则返回错误消息。但偶然发现了这个奇怪的错误。

谢谢,任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

代码:

if ($a != 1 || $a != 2) {
    echo 'x';
} else {
    echo 'y';
}

方案:

|----|--------|
| $a | result |
|----|--------|
|  0 |   x    |
|  1 |   x    | // <- result is x because $a is not 2
|  2 |   x    | // <- result is x because $a is not 1
|  3 |   x    |
|----|--------|

因为 $a始终不是1或不是。

代码:

if ($a != 1 && $a != 2) {
    echo 'x';
} else {
    echo 'y';
}

方案:

|----|--------|
| $a | result |
|----|--------|
|  0 |   x    |
|  1 |   y    |
|  2 |   y    |
|  3 |   x    |
|----|--------|