В чем разница между die() и exit() в PHP?
В чем разница между функциями die()
и exit()
в PHP?
Я думаю, что обе функции выполняют одинаковую задачу, но у меня есть сомнения, существует ли какая-то разница между ними... В чем она заключается?
5 ответ(ов)
Как уже упоминалось, эти две команды производят одинаковый токен парсера.
НО
Существует небольшая разница, а именно — сколько времени нужно парсеру для возврата токена.
Я не изучал парсер PHP, но если есть длинный список функций, начинающихся на "d", и более короткий список функций, начинающихся на "e", то, вероятно, существует временные затраты на поиск имени функции для функций, начинающихся на "e". И могут быть и другие отличия из-за того, как проверяется всё имя функции.
Сомневаюсь, что это будет измеримо, если только у вас не будет «идеальной» среды, созданной исключительно для парсинга PHP, и большого количества запросов с разными параметрами. Но разница, безусловно, существует, в конце концов, PHP — это интерпретируемый язык.
Вот что интересно. Хотя функции exit()
и die()
эквивалентны, die()
закрывает соединение, тогда как exit()
не закрывает его.
Пример с die()
:
<?php
header('HTTP/1.1 304 Not Modified');
die();
?>
Пример с exit()
:
<?php
header('HTTP/1.1 304 Not Modified');
exit();
?>
Результаты:
Используя die()
:
HTTP/1.1 304 Not Modified
Connection: close
Используя exit()
:
HTTP/1.1 304 Not Modified
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
Имейте это в виду, если это важно для вашего проекта.
Как уже отмечают все другие правильные ответы, die
и exit
идентичны и являются синонимами.
Тем не менее, у меня есть личная конвенция: когда я хочу завершить выполнение скрипта в ожидаемом и желаемом контексте, я использую exit;
. А когда мне нужно остановить выполнение из-за каких-либо проблем (например, не удалось подключиться к базе данных, не могу записать в файл и т.д.), я предпочитаю использовать die("Что-то пошло не так.");
, чтобы «убить» скрипт.
Когда я использую exit
:
header( "Location: http://www.example.com/" ); /* Перенаправляем браузер */
/* Убедитесь, что следующий код не выполнится при перенаправлении. */
exit; // Я хочу завершить выполнение сейчас.
Когда я использую die
:
$data = file_get_contents( "file.txt" );
if( $data === false ) {
die( "Ошибка." ); // Я не хочу завершать, но не могу продолжать. Убей скрипт! Убей!
}
do_something_important( $data );
Таким образом, когда я вижу exit
в какой-то части кода, я знаю, что в этой точке хочу завершить выполнение, потому что логика заканчивается здесь. Когда я вижу die
, я понимаю, что хотел бы продолжить выполнение, но не могу или не должен из-за ошибки в предыдущем выполнении.
Конечно, это работает только когда я работаю над проектом один. Когда участвует несколько человек, никто не остановит их от использования die
или exit
там, где это не соответствует моим конвенциям…
С функциональной точки зрения функции die()
и exit()
идентичны, однако я использую их в разных сценариях для повышения читаемости кода:
Используйте die()
, когда возникает ошибка и необходимо прервать выполнение скрипта.
например:
die('Упс! Что-то пошло не так');
Используйте exit()
, когда ошибки нет, но нужно остановить выполнение скрипта.
например:
exit('Запрос успешно обработан!');
Это утверждение верно в контексте написания кода на PHP. Функция die()
является алиасом функции exit()
, и на практике они делают одно и то же — завершение выполнения скрипта. Однако разница заключается в том, что die()
проще и быстрее в написании, поскольку состоит из всего трех символов по сравнению с exit()
, которая содержит четыре.
Поэтому если вам нужно просто завершить выполнение скрипта без дополнительных условий, и вы хотите сэкономить время на наборе кода, использование die()
может быть более предпочтительным.
Тем не менее, стоит отметить, что выбор между die()
и exit()
должен основываться не только на удобстве написания, но и на читабельности кода. Новым разработчикам может быть легче понять exit()
, так как это более понятное слово. В итоге, оба варианта являются эквивалентными, и вы можете использовать тот, который вам больше нравится.
UTF-8 на всех уровнях!
Сортировка двумерного массива по значению в столбце
Как в Bash-скрипте выйти из всего скрипта при выполнении определенного условия?
Что такое потокобезопасность и непотокобезопасность в PHP?
Как передать переменные и данные из PHP в JavaScript?