Какой смысл использовать пользовательский класс исключений в php? - PullRequest
6 голосов
/ 17 сентября 2010

В некоторых библиотеках принято создавать пользовательские классы исключений для каждого условия ошибки, например:

class FileNotFound_Exception extends Exception {}

Вы можете обрабатывать определенные типы исключений, однако вы не можете прочитать весь исходный код всех библиотек, чтобы запомнить каждый класс исключений, и не можете в полной мере использовать пользовательские исключения. Большую часть времени я просто ловил их с помощью базового класса Exception:

catch (Exception $e)
{
    // log and display friendly error
}

Есть ли другие способы получить выгоду от пользовательских классов исключений без написания длинного списка блоков catch? Мне нравятся исключения, но я не знаю, как их правильно использовать. Спасибо.

Ответы [ 2 ]

8 голосов
/ 17 сентября 2010

Преимущество наличия собственного класса Exception заключается в том, что вы, как автор библиотеки, можете его ловить и обрабатывать.

try {
   if(somethingBadHappens) {
     throw MyCustomException('msg',0)
   }
} catch (MyCustomException $e) {
  if(IcanHandleIt) {
    handleMyCustomException($e);
  } else {
    //InvalidArgumentException is used here as an example of 'common' exception
    throw new InvalidArgumentException('I couldnt handle this!',1,$e);
  }
}
7 голосов
/ 17 сентября 2010

Что ж, пользовательские классы исключений позволяют правильно направлять ошибки для лучшей обработки.

, если у вас есть класс

class Known_Exception extends Exception {}

и блок try catch, подобный этому:

try {
    // something known to break
} catch (Known_Exception $e) {
    // handle known exception
} catch (Exception $e) {
    // Handle unknown exception
}

Тогда вы знаете, что Исключение $ e является неизвестной ошибочной ситуацией и может справиться с этим соответствующим образом, и это очень полезно для меня.

...