Исключения php OOP или die()?

Я разрабатываю какой-то проект. И я хочу контролировать разные ошибки. Я знаю, что во всех популярных фреймворках и php-проектах есть разные Exceptions. Но я думаю, что это не обязательная работа. Если произошла ошибка, мы можем сделать die() с нашим сообщением. 1. Каковы основные плюсы Exceptions? 2. Могу ли я контролировать свои ошибки с помощью die()?

Спасибо.


person Alex Pliutau    schedule 02.10.2010    source источник


Ответы (3)


Ну, вы могли бы использовать die(). Но это делает все ошибки фатальными. Это означает, что вы вообще не можете пытаться восстановиться после ошибки. В некоторых случаях это нормально.

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

Например, допустим, у вас есть метод, который загружает файл с удаленного сервера: downloadFromRemoteServer($address);

Если вы используете die(), если загрузка не удалась, сценарий завершается. Конец истории.

Но если вы используете исключения, вы можете попробовать другой сервер или даже попробовать другой метод (HTTP против FTP и т. д.):

try {
    $file = downloadFromRemoteServer('http://example.com/foo');
} catch (DownloadFailedException $e) {
    try {
        $file = downloadFromRemoteServer('http://secondtry.example.com/foo');
    } catch (DownloadFailedException $e2) {
        die('Could not download file');
    }
}
return $file;

Но помните, что исключения полезны только в исключительных обстоятельствах. Они не предназначены для использования при любых возможных ошибках. Например, если пользователь неправильно подтверждает свой адрес электронной почты, это не является исключением. Но если вы не можете подключиться к серверу базы данных или имеете конфликт в БД, это будет исключительным обстоятельством...

person ircmaxell    schedule 02.10.2010

Александр,

die() и исключения выполняют разные задачи.

языковая конструкция "die" просто останавливает выполнение сценария и, возможно, выводит параметры, если она была вызвана как функция.

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

Исключения немного сложнее, чем это, поэтому вам, возможно, следует сначала задокументировать себя с помощью некоторого ООП или, если на то пошло, прочитать о zend framework, и вы поймете, что такое исключения.

Однако для простых вещей вы всегда можете использовать exit (или die, что одно и то же).

Я надеюсь, что это поможет, славянский

person Slavic    schedule 02.10.2010

1 Каковы основные плюсы Exceptions?

Основные преимущества:

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

2 Могу ли я контролировать свои ошибки с помощью die()?

Я бы вряд ли назвал это контролем, я бы назвал это отказом от фактической обработки ошибки. Ни в одном из моих проектов нет die() действительно удобного для пользователя, и все эти die('...some error condition...'); примеры PHP-кода ИМХО подходят только для проектов в разработке. В производственной среде вы хотите, чтобы ваши пользователи могли продолжать свои задачи / программы самым простым способом, поэтому «попробуйте еще раз» (если условие ошибки вряд ли будет выполнено снова), «извините, это не работает ' / другие виды сообщений, формы / страницы более желательны, чем die().

person Wrikken    schedule 02.10.2010