我只是偶然发现中间件中的奇怪错误简单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_id
是2
。
我的代码有什么问题吗?但是,如果我只运行一个语句,逻辑运行得很好,所以当我使用多个语句时,我认为问题就出现了。
实际上我只是想检查登录的用户role_id
是1
还是2
,如果是,则执行下一个请求,否则返回错误消息。但偶然发现了这个奇怪的错误。
谢谢,任何帮助表示赞赏。
答案 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 |
|----|--------|