Php throw не работает изнутри блока catch

Когда я вызываю $ this-> get (), и он выдает исключение внутри метода get, которое не является ClientException, ВЫЗЫВАЕТСЯ последний блок catch, однако весь метод возвращает NULL.

Я подтвердил с помощью var_dump ($ e) внутри последнего блока catch, что ошибка перехвачена этим блоком catch ... но бросок не работает!

Это просто шокирует меня, и я не понимаю, почему.

public function get(string $url, $params = null): array
{
    $client = new Client();
    try {
        $response = $client->get($url, ['query' => $params]);
        return json_decode($response->getBody(), true);
    } catch (ClientException $e) {
        if (!empty($response = self::handleGuzzleErrors($e, $url))) {
            return $response;
        }
        throw $e;
    } catch (\Exception | \Throwable $e) {
        var_dump($e);
        throw $e;
    }
}
public function getSub(string $url, array $subs, $params = null): array
{
    $url = strtr($url, $subs);
    $result = $this->get($url, $params);
    return $result;
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
19
1

Ответы 1

throw! = return

Попробуйте заключить вызов $this->get() в команду try / catch следующим образом:

public function getSub(string $url, array $subs, $params = null): array
{
    $url = strtr($url, $subs);
    try {
        $result = $this->get($url, $params);
    } catch (\Exception | \Throwable $e) {
        echo "This gets called";
    }
    return $result;
}

Нет смысла возвращать что-либо, кроме null, если соединение не удалось и возникла ошибка.

Если вы хотите, чтобы при возникновении ошибки возвращалось значение "по умолчанию", используйте return вместо throw.

Другие вопросы по теме