Когда я вызываю $ 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;
}






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.