PHP/Yii2 как правильно обрабатывать исключения?

Признаюсь, я нуб по части работы с исключениями. Раньше, по большей части, обходился без них, а теперь хочу разобраться.
Зачем в PHP два базовых класса \Exception и \ErrorException?
Почему Exception перехватывает Unknown Property Exception, но не ловит, скажем, деление на 0?? А в ErrorException с точности наоборот?
try {
  $myClass->myUnknowProperty;
  //10/0; //error!!!1
  // throw new \ErrorException ("tralala"); // error!!!
} catch (\Exception $e) { 
  log("warning UnknowProperty");
}

try {
  //$myClass->myUnknowProperty; //error!!
  10/0;
  //throw new \Exception("tralala"); // error!!
} catch (\ErrorException $e) { 
  log("warning division by zero");
}

Моя цель, в случае ошибки залогировать ее и показать пользователю страницу, пусть и с некоторыми багами, но не кидать его на server error.
Как перехватываете исключения вы?
  • Вопрос задан
  • 1938 просмотров
Решения вопроса 1
@Zohei Автор вопроса
Почему Exception перехватывает Unknown Property Exception, но не ловит, скажем, деление на 0?? А в ErrorException с точности наоборот?

это все частично от невнимательности:
catch \Exception прекрасно перехватывает исключения, я же пытался ловить исключения классом \yii\base\Exception =(
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Недавно на хабре была опубликована хорошая статья на эту тему, с примерами для Yii:
Правильное использование Exception’ов в PHP.
Ответ написан
ppokrovsky
@ppokrovsky
ErrorException используется например когда нужно превратить сообщение об ошибке в PHP в исключение
см set_error_handler
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы