LINUX.ORG.RU

Исключения и Laravel - не пойму

 , , , ,


0

1

Не пойму, почему не работают исключения.

Пишу такой код:

try {
    $phone=UserChannels::where('user', Auth::user()->id)->where('channel_type', $phoneTypeId)->first()->value;
} catch (Exception $e) { 
    $phone='';
}


По идее, при любой ошибке он должен просто сделать $phone=".

Но вместо этого Laravel показывает ошибку на длинной строке:

ErrorException (E_NOTICE)
Trying to get property of non-object


Вопрос: почему Laravel ловит исключение, а не блок catch{} ?

★★★★★

Ответ на: комментарий от Xintrea

чтобы эмулировать старое поведение, надо Throwable ловить

Не совсем так. В седьмой пых завезли исключения для всего, что раньше надо было через обработчик (error_handler) ловить и теперь можно ловить всё через Throwable. Через Exception ловится всё, что и раньше ловилось, т.е. ничего не поменялось. Для обратной совместимости нужно ловить оба (пых до 7 будет ловить Exception, 7 - Throwable), а если ориентироваться только на php7 то можно ловить только Throwable.

no-such-file ★★★★★ ()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

В общем, решилась проблема просто путем прописывания

use \Exception;


Throwable ловить не надо. Котом из топика ErrorException ловится. PHP 7.0.33-0+deb9u3

Xintrea ★★★★★ ()
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от Xintrea

Throwable базовый интерфейс для всех исключений, включая и Exception. Кстати, в Java также.

first() может вернуть null, лучше бы вы это ifом обработали. По умолчанию Throwable не умеет в E_NOTICE. Это не Java, с ее NPE

fman2 ()