Каковы различия в die () и exit () в PHP?

611

Чем отличаются функции die() и exit() в PHP?

Я думаю, что оба имеют одинаковую функциональность, но я сомневаюсь, что в обоих есть что-то различное... что это?

  • 5
    die () и exit () отличаются в других языках, но в php просто прочитайте это beastwithin.org/users/wwwwolf/code/phprant.html
  • 1
    exit () просто выводит программу с числовым статусом выхода, а die () выводит сообщение об ошибке в stderr и выходит со статусом EXIT_FAILURE. so exit() is exit and die() is also exit :)
Теги:
exit
die

17 ответов

500

Нет никакой разницы - они одинаковы.

Руководство по PHP для exit:

Примечание. Эта языковая конструкция эквивалентна die().

Руководство по PHP для die:

Эта языковая конструкция эквивалентна exit().

  • 14
    псевдонимы позволяют программистам использовать тот, который удобен для. Я помню выход лучше, чем умереть. Некоторые помнят, что умирают лучше, чем выход.
  • 26
    это ( php.net/manual/en/aliases.php ) может дать некоторое объяснение, почему 2 функции делают то же самое
Показать ещё 11 комментариев
197

РАЗНИЦА В ПРОИСХОЖДЕНИИ

Разница между die() и exit() в PHP - это их origin.


ФУНКЦИОНАЛЬНО ЭКВИВАЛЕНТ

die() и exit() являются эквивалентными функциями.

Руководство по PHP

Руководство по PHP для die:

Эта языковая конструкция эквивалентна exit().

Руководство по PHP для exit:

Примечание. Эта языковая конструкция эквивалентна die().

Руководство по PHP для Список псевдонимов функций:

die является псевдонимом для главной функции exit()


РАЗЛИЧИЕ В ДРУГИХ ЯЗЫКАХ

die() и exit() разные на других языках но на PHP они идентичны.

Из Еще одно написание PHP:

... Как C и Perl-кодер, я был готов ответить: "Почему, exit() просто поручает выключить программу с числовым статусом выхода, а die() выдает сообщение об ошибке в stderr и выходы с статусом EXIT_FAILURE." Но тогда Я помнил, что мы находимся в грязной синтаксической области PHP.

В PHP, exit() и die() идентичны.

Дизайнеры, очевидно, подумали: "Хм, пусть займется exit() из C. И Perl людям, вероятно, понравится, если мы возьмем die(), как и Perl. К сожалению! Теперь у нас есть две функции выхода! Позвольте сделать так, чтобы они оба может принимать строку или целое число в качестве аргумента и сделать их идентичными!"

Конечный результат заключается в том, что на самом деле это не делало вещи "проще", просто более запутанным. C и Perl будут продолжать использовать exit() для бросать только целое значение выхода и die(), чтобы бросить сообщение об ошибке и выйти с ошибкой. Новички и люди из PHP-как-первых вероятно, будут удивлены "umm, две функции выхода, которые я должен использовать?" В руководстве не объясняется, почему есть exit() и die().

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

  • 10
    Несмотря на то, что речь идет о 100-м ответе о том, что они эквивалентны (как также видно из моего ответа ^^), это действительно добавляет ОЧЕНЬ хорошие плюсы. Больше всего то, что они НЕ одинаковы в других языках (таким образом, путаница в первую очередь). (+1)
  • 0
    @ Левит, нет, нет, вы все неправильно поняли. Никто не владеет именами, а разные языки используют одни и те же имена неравным образом. Это хорошо, потому что нам не нужен еще один стандартный способ работы. «Путаница в первую очередь» происходит из-за того, что PHP назначает два разных имени одной функции.
Показать ещё 1 комментарий
54

Как указано выше, эти две команды создают один и тот же токен синтаксического анализатора.

НО

Есть небольшая разница, и это то, сколько времени занимает парсер, чтобы вернуть токен.

Я не изучал синтаксический анализатор PHP, но если это длинный список функций, начинающихся с "d", и более короткий список, начинающийся с "e", то должен быть временной штраф при поиске имени функции для функций, начинающихся с " е". И могут быть другие различия из-за того, как проверяется полное имя функции.

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

  • 3
    @ Timeless, Перфекционисты не сказали бы: «PHP - интерпретируемый язык». PHP - это язык, который может быть интерпретирован или скомпилирован в зависимости от настроек вашего сервера.
  • 17
    И ... "die" имеет длину 3 символа против 4 для "exit". Так что это занимает на 25% меньше памяти и файлового пространства! ;)
Показать ещё 2 комментария
39

Руководство по PHP на die:

die - Эквивалент для выхода

Вы даже можете die; так же, как exit; - с паренсом или без него.

Единственным преимуществом выбора die() перед exit() может быть время, которое вы тратите на ввод дополнительной буквы ;-)

  • 0
    это также удобно, если кто-то пришел с другого языка, если они знакомы с
25

Как и все другие правильные ответы, die и exit идентичны/псевдонимы.

Хотя у меня есть личное соглашение о том, что, когда я хочу закончить выполнение script, когда это ожидаемо и желательно, я использую exit;. И когда мне нужно закончить выполнение из-за некоторых проблем (не удалось подключиться к db, не удалось записать в файл и т.д.), Я использую die("Something went wrong."); для "убивания" script.

Когда я использую exit:

header( "Location: http://www.example.com/" ); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit; // I would like to end now.

Когда я использую die:

$data = file_get_contents( "file.txt" );
if( $data === false ) {
    die( "Failure." ); // I don't want to end, but I can't continue. Die, script! Die!
}
do_something_important( $data );

Таким образом, когда я вижу exit в какой-то момент в моем коде, я знаю, что на этом этапе я хочу выйти, потому что логика заканчивается здесь. Когда я вижу die, я знаю, что я хотел бы продолжить выполнение, но я не могу или не должен из-за ошибки в предыдущем выполнении.

Конечно, это работает только при работе над проектом. Когда будет больше людей, никто не будет препятствовать им использовать die или exit, где это не соответствует моим соглашениям...

10

Эта страница говорит, что die является псевдонимом exit, поэтому они идентичны. Но также объясняется, что:

существуют функции, которые меняли имена из-за очистки API или какой-либо другой причины, а старые имена сохраняются только как псевдонимы для обратной совместимости. Как правило, это плохая идея использовать эти псевдонимы, поскольку они могут быть связаны устареванием или переименованием, что приведет к неуправляемому script.

Итак, назовите меня параноидальным, но в будущем не может быть die.

  • 3
    Он также говорит, что в некоторых случаях нет предпочтительного имени среди множества, например, is_int() и is_integer() одинаково хороши. Если посмотреть историю фиксации php-src в GitHub, конструкция die() была в PHP по крайней мере с 1999 года, когда она была преобразована в репозиторий SVN, и, вероятно, до тех пор, пока существует язык. Кажется абсурдом представить, что это когда-либо будет осуждается.
  • 2
    @MarkAmery, В то время как его предпосылки не приводят к его заключению, сам вывод верен: ~ "Назовите меня параноиком, но в будущем не может быть exit . Или не может быть die в будущем"
Показать ещё 3 комментария
6

Этот вывод https://3v4l.org демонстрирует, что die и exit функционально идентичны. Изображение 728

6

Они, по сути, одинаковы, хотя в статье говорится об обратном.

  • 1
    Эта статья просто странная; из определения сканера вы можете сказать, что они эквивалентны; если есть какая-то разница, возможно, тест был выполнен без opcache.
  • 0
    Статья о тесте, который невозможно воспроизвести, так как код не опубликован. Просто игнорируй это.
5

Вот кое-что, что довольно интересно. Хотя exit() и die() эквивалентны, exit() закрывает соединение. die() не закрывает соединение.

exit():

<?php
    header('HTTP/1.1 304 Not Modified');
    exit();
?>

die():

<?php
    header('HTTP/1.1 304 Not Modified');
    die();
?>

Результаты:

exit():

HTTP/1.1 304 Not Modified 
Connection: Keep-Alive 
Keep-Alive: timeout=5, max=100

die():

HTTP/1.1 304 Not Modified 
Connection: close

Просто в случае необходимости принять это во внимание для вашего проекта.

Кредиты: https://stackoverflow.com/questions/8665985/php-utilizing-exit-or-die-after-headerlocation

  • 1
    Исходный URL имеет противоположный вывод: die () закрывает соединение, а exit () - нет.
2

По функциональности они идентичны, но я использую их в следующих сценариях, чтобы сделать код читабельным:

Используйте "die" при возникновении ошибки и должны остановить выполнение.

например, die( 'Oops! Something went wrong' );

Используйте "выход", когда нет ошибки и нужно остановить выполнение.

например, exit( 'Request has been processed successfully!' );

1

При использовании командной строки

 die("Error");

Вернется к "Ошибка" в STDOUT и выйдет с кодом ошибки 0.

если вы хотите выйти с кодом ошибки 1, вам необходимо:

  fwrite(STDERR, "Error");
    exit(1);

Это может быть полезно при выполнении сценариев php из командной строки или сценариев оболочки, и вы хотите узнать, завершен ли script с кодом нулевого выхода. скопированный ответ charanjeet из Quora

  • 2
    Копирование неправильного ответа из другого источника не помогает.
0

Из того, что я знаю, когда я смотрю на этот вопрос здесь

Там говорится, что "в PHP есть четкое различие в выводе заголовка. В приведенных ниже примерах я решил использовать другой заголовок, но для демонстрации разницы между exit() и die(), которая не имеет значения", и проверено (лично)

-1

Функционально они идентичны. Поэтому выбирать, какой из них использовать, является полностью личным предпочтением. Семантически по-английски они разные. Звук звучит отрицательно. Когда у меня есть функция, которая возвращает данные JSON клиенту и завершает работу программы, это может быть ужасно, если я вызываю эту функцию jsonDie(), и более целесообразно называть ее jsonExit(). По этой причине я всегда использую exit вместо die.

  • 0
    ОП спрашивает только о функциях выхода и PHP.
  • 0
    Да, и я отвечал только на этот вопрос. Однако, чтобы знать, вопрос не только в разнице в функциональности.
Показать ещё 2 комментария
-3

Результат функций exit() и die() всегда одинаков. Но, как объяснено на странице руководства по псевдонимам (http://php.net/manual/en/aliases.php), говорится, что функция die() вызывает функцию выхода. Я думаю, что это жестко, как показано ниже:

function die($msg){
  exit($msg);
}

Это не проблема производительности для малых, средних и крупных проектов, но если в проекте есть миллиарды, умноженные на миллиарды, умноженные на миллиарды процессов, это очень важное состояние оптимизации производительности.

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

Но точный ответ таков; всегда мастер-функция быстрее, чем псевдоним.

В заключение; На странице руководства Alias написано, что вы больше не можете использовать die. Это только псевдоним, и он не рекомендуется.

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

  • 1
    Псевдоним не является «вызовом функции». Проверьте свои предположения, прежде чем разрабатывать гипотезу.
  • 0
    @dolmen Aliases всегда вызывает основные функции в жестких кодах. Это общее правило программирования.
Показать ещё 2 комментария
-3

В w3schools Опрос: Функции die() и exit() выполняют то же самое? мой ответ ложный. Это неправильный ответ. Правильный ответ верен.

Вот скриншот: Изображение 729

-4

Что-то, что я заметил в моих сценариях, по крайней мере, заключается в том, что exit() остановит текущий исполняемый script и передаст управление обратно любому вызывающему script, в то время как die остановит php на своих дорожках. Я бы сказал, что это большая разница?

  • 1
    @AdarshMadrecha это не правда. Если они находятся внутри или снаружи подфункции, скрипт php всегда останавливается.
-8

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

Обычно вам это действительно не нужно, но при написании сценариев консоли PHP вы можете проверить, например, с помощью Bash, если script выполнил все правильно.

Затем вы можете использовать exit() и позже поймать. Однако Die() не поддерживает это.

Die() всегда существует с кодом 0. Поэтому по существу команда die() выполняет следующие действия:

<?php
echo "I am going to die";
exit(0);
?>

Это то же самое, что:

<?php
die("I am going to die");
?>
  • 39
    Это не правда. die и exit идентичны (они создают один и тот же токен синтаксического анализатора ( T_EXIT ) и выполняются с помощью одного и того же кода). Если параметр является целым числом, он вернет этот код в оболочку. Если это не так, он выведет его и вернет 0. Таким образом, die и exit являются буквально псевдонимами друг для друга.
  • 5
    хорошо, если вы знаете, что вы можете использовать выход ("Я выхожу ...");
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню