Зачем возвращать void, если оператор return никогда не достигается? - PullRequest
0 голосов
/ 13 мая 2018

Это немного другой вопрос, потому что он не имеет прямого отношения к моему коду, а к коду, вызывающему проблему в другом вопросе .

При копании кода, связанного с этим другим вопросом, я обнаружил странное return утверждение, которое я не понимаю. Прежде чем перейти к моему вопросу, ознакомьтесь с этими двумя фрагментами кода из кода laravel/framework.

Черта \ Illuminate \ Foundation \ Auth \ AuthenticatesUsers :

/**
 * Handle a login request to the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\Http\JsonResponse
 *
 * @throws \Illuminate\Validation\ValidationException
 */
public function login(Request $request)
{
    $this->validateLogin($request);

    // If the class is using the ThrottlesLogins trait, we can automatically throttle
    // the login attempts for this application. We'll key this by the username and
    // the IP address of the client making these requests into this application.
    if ($this->hasTooManyLoginAttempts($request)) {
        $this->fireLockoutEvent($request);

        return $this->sendLockoutResponse($request);
    }

    if ($this->attemptLogin($request)) {
        return $this->sendLoginResponse($request);
    }

    // If the login attempt was unsuccessful we will increment the number of attempts
    // to login and redirect the user back to the login form. Of course, when this
    // user surpasses their maximum number of attempts they will get locked out.
    $this->incrementLoginAttempts($request);

    return $this->sendFailedLoginResponse($request);
}

Черта \ Illuminate \ Foundation \ Auth \ ThrottlesLogins :

/**
 * Redirect the user after determining they are locked out.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return void
 * @throws \Illuminate\Validation\ValidationException
 */
protected function sendLockoutResponse(Request $request)
{
    $seconds = $this->limiter()->availableIn(
        $this->throttleKey($request)
    );
    throw ValidationException::withMessages([
        $this->username() => [Lang::get('auth.throttle', ['seconds' => $seconds])],
    ])->status(429);
}

В признаке AuthenticatesUsers проверяется, не было ли слишком много попыток аутентификации для данного пользователя. Если это так, происходит событие и возвращается ответ о блокировке. Пока все хорошо.

Что я не понимаю, так это выражение return перед $this->sendLockoutResponse($request). Данный метод всегда генерирует исключение и ничего не возвращает (ну, он вернул бы void, но это не так, потому что он всегда throws).

Так, какова цель выражения return здесь? Является ли подсказка для читателя, что login() отменяется в этот момент, или это какой-то особый синтаксис, о котором я никогда раньше не слышал?

...