PHP - Преобразование всех ошибок в исключения - хорошо или плохо? - PullRequest
16 голосов
/ 10 июня 2009

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

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    return false;
}

Я предполагаю, что вы можете просто начать использовать "try / catch" вокруг определенных фрагментов кода, которые обычно выдают ошибки.

Если дело не в Хорошем / Плохом, какие из Готчей могут возникнуть в результате этой практики?

Ответы [ 3 ]

8 голосов
/ 10 июня 2009

К сожалению, это не сработает для fatal / parse / etc. ошибки ...

Точно не помню, но я пробовал это, и в некоторых случаях получалось сообщение типа "не могу выбросить исключение без обходного пути ...", но я не могу вспомнить условия для получения этого результата. Но сейчас я пользуюсь этим способом и полностью доволен.

2 голосов
/ 10 июня 2009

Используйте исключения для вещей, которые действительно находятся вне вашего контроля.

Хорошо:

try {
   if (fopen('file.txt', 'w') === false) {
      throw new Exception('File could not be opened for write access.');
   }
} catch (Exception $e) {
   echo $e->getMessage();
}

Bad:

try {
   if (strlen($_POST['username']) < 5) {
      throw new Exception('Username too short');
   }
} catch (Exception $e) {
   echo $e->getMessage();
}

Первый способ хорош, потому что он происходит, когда пользователь или приложение не могут его контролировать. Он не может открыть файл, потому что? может быть много причин.

Второй способ - это чрезмерное использование try / catch, когда вы должны использовать trigger_error. Второй способ заключается в том, что пользователь не знает правил проверки имени пользователя.

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

1 голос
/ 23 октября 2012

Проработав много лет в Java / .Net в прошлом, а теперь и в php в последние годы, очень раздражает наличие всех этих различных соглашений об ошибках, в то время как шаблон исключений действительно хорош для всего - начиная с ошибок уровня приложения, класса ошибки, системные ошибки - что угодно.

Я действительно вкладываю довольно много усилий в управление всеми типами ошибок, потому что каждая библиотека / функция обрабатывает ошибки по-разному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...