обработка ошибок в PHP, умереть против исключений - PullRequest
4 голосов
/ 27 января 2012

Например, мое использование будет:

$check = 'no';

if($check == 'yes') {
   //do stuff
} else {
      die('Error found');
}

Многие разработчики используют то, что я видел:

if($check == 'yes') {
      //do stuff
   } else {
      throw new Exception('Error found.');
   }
  1. Какой метод «лучше»?
  2. Любая выгода выдает исключение вместо остановки выполнения скрипта?

Ответы [ 4 ]

7 голосов
/ 27 января 2012

Я хотел бы избавить всех от некоторых неприятностей и отослать вас сюда: Обработка ошибок PHP: die () Vs trigger_error () Vs throw Exception Очень подробное объяснение их использования, я полагаю, что это нельзя сказать лучше.

0 голосов
/ 09 июля 2015

Вы можете использовать оба, throw new Exception, если возникает какая-то исключительная ситуация (соединение с базой данных или запрос, страница или файл не найдены ...), а затем catch это там, где это вам подходит. Затем, возможно, запишите ошибку в файл, отправьте письмо администратору и затем используйте die("Some textual message to user.");. Если вы не хотите использовать die (), вы можете показать пользователю страницу 404 не найдена или страницу с внутренней ошибкой 500.

0 голосов
/ 27 января 2012

Исключения лучше (в дизайне больших сайтов), потому что:

  • Они не останавливают скрипт немедленно (у вас есть возможность сообщить пользователю на хорошей странице 5xx о внутренней ошибке сервера)
  • Если в будущем вы решите по-другому обработать ошибку, вы можете сделать это без изменения исходного кода
  • Исключения обеспечивают обратную трассировку и упрощают отладку
  • Я не уверен, но деструкторы не должны вызываться при использовании die (исключения предоставляют возможность их выполнения)
  • Вы можете создать множество типов Исключений, каждый для различного рода ошибок, и легко обработать их позже

Вы должны использовать die, вероятно, только в небольших скриптах и ​​страницах, где вам не нужно стилизовать ошибку для использования или в случае фатальной ошибки (нельзя включить основную библиотеку в индекс или что-то подобное).

0 голосов
/ 27 января 2012

Какой метод «лучше»?

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

Любая выгода выдает исключение вместо прекращения выполнения скрипта?

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

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

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