Разница между исключениями и ошибками? - PullRequest
4 голосов
/ 27 мая 2010

В чем разница между ошибкой и исключением?

Я прочитал множество ресурсов в Интернете и в нескольких книгах, но предоставленные объяснения не очень тщательны. Таким образом, я все еще в замешательстве.

Спасибо!

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

Ответы [ 3 ]

6 голосов
/ 27 мая 2010

Ни. Исключения и ошибки - это когда код что-то делает не так. Ожидается, что пользователь более или менее введет неверную информацию для входа. Проверьте правильность имени пользователя и пароля, если нет, перенаправьте пользователя обратно на страницу входа (header('location:login.php?failed=1');), а затем, если установлено $_GET['failed'], отобразите сообщение. Это был бы самый простой способ.

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

5 голосов
/ 27 мая 2010

Не существует «должен» или «лучший» способ обработки ошибок.

Вообще говоря, есть два типа ошибок

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

Обратите внимание, что ни один из них не имеет никакого отношения к конкретным механизмам PHP, которые вы бы использовали для обработки ошибок.

Если вы используете исключения ... Затем я рекомендую использовать исключения по всем направлениям. Зарегистрировать обработчик исключений и позволить ему выполнять большую часть работы - , включая другие ошибки PHP . Неверные данные для входа?

class InvalidLoginException extends Exception
{
  protected $message = 'Login information is incorrect. Please try again.';
}

Тогда у вас есть куча вариантов реализации.

try {
  $user->login(); // will throw and InvalidLoginException if invalid
}
catch ( InvalidLoginException $e )
{
  // display an error message
}

Или, если вы того пожелаете, пусть обработчик исключений сделает это. Может быть, даже более гибким способом

class ApplicationErrorException extends Exception{}
class InvalidLoginException extends ApplicationErrorException 
{
  protected $message = 'Login information is incorrect. Please try again.';
}

Затем в обработчике исключений

if ( $exception instanceof ApplicationErrorException )
{
  // dislpay error message
}

Но исключения - не единственный способ, и некоторыми даже не считается хорошим способом .

0 голосов
/ 27 мая 2010

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

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